微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript XML解析

有没有一种方法可以遍历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);
}

一个完全不起作用,第二个在此示例中起作用.

解决方法:

这实际上是对Hemlock答案的澄清.我将其放在此处而不是评论他的答案,因为我没有空间在评论中绘制漂亮的ASCII艺术.

可以说我们有以下XML:

<a><b></b><c></c></a>

这将生成以下DOM:

<a>--.
     |
    <b>
     |
    <c>

这通常是您所期望的.

可以说我们现在有以下XML:

<a>
   <b></b>
   <c></c>
</a>

您会认为这会生成相同的DOM.但是按照标准,你会错的.相反,该标准要求它生成以下DOM:

<a>--.
     |
    "\n   "
     |
    <b>
     |
    "\n   "
     |
    <c>
     |
    "\n"

是的,规范说所有这些空格都应该在DOM中捕获.几乎所有的XML实现都可以做到这一点(不仅在浏览器中).唯一的例外是IE(并且扩展了JScript中的XML引擎),因为Microsoft不太在乎违反标准.

就个人而言,这是99.999%的时间无用.大约只有在这一次有用,如果您要尝试实现XML代码编辑器.但是它在标准中,因此如果浏览器想要符合标准,则需要实施它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。