我正在尝试使用javascript创建一个便携式应用程序,从XML文件中提取数据并将其显示在数据网格中。这些数据包含一些肯定会包含一些数据的字段以及一些可能包含或不包含数据的字段。第二个字段是作者,我的数据可以包含1到9个作者。所有这些数据都在excel文件中,我从中转换为xml,它显然不包含<author2>
,<author3>
等标记,如果它们不存在记录的话。
首先,在通过javascript解析数据时,我不得不保留这个:
document.createTextNode(x[i].getElementsByTagName("author3")[0].childNodes[0].nodeValue);
...在try-catch块中,因为我找不到任何替代方案。用“if”检查标签的存在是不行的。我认为这种方法效率不高。
其次,对于authors字段,我想添加尽可能多的行,每行包含一行,因为记录中有多个作者。为此,我尝试在作者之间添加\n
并从中创建一个文本节点,但它没有帮助。
答案 0 :(得分:0)
如前所述,如果您发布一些代码和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
}
请注意,如果TypeError
标记结果没有任何子项,则仍会引发<author3>
至于你的第二个问题:在HTML中,忽略任何不需要的空格。这包括换行符(\n
)。要在HTML中插入换行符,您必须添加<br />
:
document.createElement('br');