0

我在循环通过 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)每隔一秒跳过一次 innernode representation。有更好的解决方案吗?

4

1 回答 1

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.

我希望这有助于阐明一些观点。

于 2013-10-21T14:46:34.387 回答