javascript,循环遍历XML

时间:2013-10-21 13:35:25

标签: javascript xml

我在循环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。有更好的解决方案吗?

1 个答案:

答案 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.

我希望这有助于解释一些问题。