我在循环XML结构时遇到问题。 我的XML结构如下:
<main>
<representation>
<representation>A</representation>
<class>B</class>
<notes/>
<room>C</room>
</representation>
<representation>
<representation>D</representation>
<class>E</class>
<notes>F</notes>
<room>G</room>
</representation>
</main>
. . .
修改
我想要的是迭代每个主节点表示并将信息传递到表中。问题是我得到了具有这种结构的XML文件,我无法影响它。那么我怎样才能通过每个主节点表示迭代并跳过内部节点(也称为representation
)?
var columnContent1 = xmlDoc.getElementsByTagName("representation");
var tableContent = "";
for (i = 0 ; i<columnContent1.length; i++)
{
if (i % 2 == 1) {
tableContent += "<tr>";
tableContent += "<td>" + columnContent1[i].childNodes[0].childNodes[0].nodeValue + "</td>";
tableContent += "<td>" + columnContent1[i].childNodes[1].childNodes[0].nodeValue + "</td>";
tableContent += "<td>" + columnContent1[i].childNodes[2].childNodes[0].nodeValue + "</td>";
tableContent += "<td>" + columnContent1[i].childNodes[3].childNodes[0].nodeValue + "</td>";
tableContent += "</tr>";
}
};
tableBodyToday.innerHTML = tableContent;
在Chrome中运行正常,但并不完美。
在Firefox中我收到错误
TypeError: columnContent1[i].childNodes[0].childNodes[0] is undefined
我如何获得这样的信息?
<tr>
<td>A</td><td>B</td><td></td><td>C</td>
</tr>
<tr>
<td>D</td><td>E</td><td>F</td><td>G</td>
</tr>
如果节点是表数据为空。 我认为解决方案很简单,但我没有得到正确的解决方案。
if (i % 2 == 1)
跳过每隔一个内部节点representation
。有更好的解决方案吗?
答案 0 :(得分:1)
我看到3个问题,我在这里为你做了一个小提琴http://jsfiddle.net/MgQf8/1/
我不是100%确定您想要的输出,但首先是..
致电时:
document.getElementsByTagName("representation");
您正在选择父节点和子节点,因此在您的情况下,您的列表长度为4,并且只有2个节点实际上有子节点(如果(i %2)
,这可能就是您这样做的原因?所以我更改了它,通常在XML中,您将使用某种根节点,然后迭代该位置的每个子节点(假设每个子节点将被命名为representation
,因此忽略任何子子representation
节点)我认为可能会让你有些困惑吗?
因此你可以使用:
var columnContent1 = document.getElementsByTagName("root");
for (i = 0 ; i<columnContent1.children.length; i++)
第三,你试图从每个孩子那里取回价值的方式不起作用,因为那里没有你的价值,如果你在chrome中使用console.dir,你将能够从那里看到对象结构
columnContent1[i].children[0].innerText
// Returns value `A` of a representationChild node.
我希望这有助于解释一些问题。