【问题标题】:Need help in parsing data from XML through JavaScript在通过 JavaScript 解析 XML 数据时需要帮助
【发布时间】:2012-01-29 18:22:09
【问题描述】:

我正在尝试用 javascript 制作一个可移植的应用程序,该应用程序从 XML 文件中提取数据并将其显示在数据网格中。这些数据有一些字段肯定会有一些数据,还有一些字段可能包含也可能不包含数据。第二个字段是作者,我的数据可以包含 1 到 9 个作者。所有这些数据都在我转换为 xml 的 excel 文件中,它显然不包含 <author2><author3> 等标签,如果它们没有记录的话。

首先,在通过 javascript 解析数据时,我必须保留这个:

document.createTextNode(x[i].getElementsByTagName("author3")[0].childNodes[0].nodeValue);

...在 try-catch 块中,因为我找不到任何替代方案。简单地用“if”检查标签的存在是行不通的。我觉得这个方法效率不高。

其次,对于作者字段,我想在表中的每一行中添加尽可能多的行,因为记录中有作者的数量。为此,我尝试在作者之间添加\n 并从中创建一个文本节点,但它没有帮助。

【问题讨论】:

  • 1) 向我们展示相关代码总是有帮助的! 2)不清楚你在问什么。

标签: javascript xml-parsing


【解决方案1】:

如前所述,发布一些代码和 XML 示例会有所帮助

话虽如此,这里有一些可能(或可能不会)帮助您的提示。

你说“仅仅用if检查标签的存在是行不通的”。我假设你的意思是做这样的事情:

if (x[i].getElementsByTagName("author3")[0]) { /* [...] */ }

...给了你一个TypeError

原因很简单。如果<author3> 不存在,getElementsByTagName 将返回一个空集合。因此,x[i].getElementsByTagName("author3")[0] 将永远是 undefined

您可以通过几种方式解决此问题。其中一种方法是使用try/catch,这是一个完全有效的解决方案。另一种方法是检查集合的长度,如下所示:

var author3 = x[i].getElementsByTagName("author3");
var author3_name;
var author3_node;

if (author3.length > 0) {
    author3_name = author3[0].childNodes[0].nodeValue;
    author3_node = document.createTextNode(author3_name);
    // Do something with author3_node
}

请注意,如果 <author3> 标记结果没有任何子级,这仍然会抛出 TypeError...

至于您的第二个问题:在 HTML 中,任何不需要的空格都会被忽略。这包括换行符 (\n)。要在 HTML 中插入换行符,您必须添加 <br />:

document.createElement('br');

【讨论】:

  • 这回答了您的问题吗?如果是,请将其标记为已接受。如果不是,请修改您的问题,以便有人可以给您更准确的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
相关资源
最近更新 更多