【发布时间】:2011-01-16 22:07:39
【问题描述】:
有没有办法在 JavaScript 中循环遍历 XML 节点的直接子节点,而不使用 jquery 或类似的库?我尝试使用“.childNodes”,但由于某种原因它不能正常工作。 “.childNodes.length”返回一个通常大于直接节点数的数字,并且所有标签名称(使用 .tagName)由于某种原因未定义。我知道我的 XML 数据格式正确,因为如果我使用直系子项的标签调用“.getElementsByTagName()”,它就可以正常工作。 我的困境的一些例子:
var root = xmlData.getElementsByTagName("library_geometries")[0];
for (i = 0; i < root.childNodes.length; i++) //get all the geometries
{
geom = root.childNodes[i];
alert(geom.tagName);
}
------------------------------------------------------
geom = root.getElementsByTagName("geometry");
for (i = 0; i < geom.length; i++) //get all the geometries
{
alert(geom[i].tagName);
}
第一个根本不起作用,第二个在这个例子中起作用。
【问题讨论】:
-
如果发生在我身上,我想先检查“nodeType”属性。可能混入了 CDATA(文本)节点?
-
哦,这也不是关于解析 XML,因为如果你正在遍历 DOM,某些东西已经解析了它(大概是浏览器)。
-
完全同意@Pointy.. 改用JS xml 解析器? (即莎丽莎...dev.abiss.gr/sarissa)
-
嗯...我确实检查了每个孩子的 nodeType,由于某种奇怪的原因,它在 1 和 3 之间变化。奇怪,因为我只有根节点内的标签,因此它应该只有元素节点而不是文本节点。
-
XML 规范
requires空白被保留为文本节点。这些包括制表符、换行符和空格。您可能会看到这个问题,因为您的 XML 是为人类消费而格式化的。如果您删除所有不必要的空格,那么所有这些 type3 节点都将消失。有趣的是,IE 是唯一没有这个问题的浏览器,因为它不关心违反规范。我个人认为规范是愚蠢的。
标签: javascript xml parsing