按名称访问XML DOM子节点

rob*_*och 6 javascript xml dom

我想在JavaScript中访问XML对象的textContent属性.根项目有几个孩子,他们自己也有一些孩子.为了让孩子们在第一级,我只是遍历根元素的childNodes数组.但是为了获得"孙子"的价值,我想使用类似的东西getElementsByTagName(),这是行不通的.目前我只是再次遍历所有子节点并检查每个子节点的nodeName属性以获取我的值.有没有办法按名称获取子对象?

XML(注意:我在内部获得的XML文档是未格式化的,没有空格,没有#text节点):

<root>
  <element>
    <child1>content</child1>
    <child2>content</child2>
    <child3>content</child3>
  </element>
  <element>
    <child1>content</child1>
    <child2>content</child2>
    <child3>content</child3>
  </element>
</root>
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试了什么:

xmlDoc = xmlhttp.responseXML;
for(i = 0; i < xmlDoc.documentElement.childNodes.length; i++)
{
  key = xmlDoc.documentElement.childNodes[i];
  alert(key.getElementsByTagName('child1')[0].textContent);
}
Run Code Online (Sandbox Code Playgroud)

导致消息框:undefined
和控制台错误:TypeError:key.getElementsByTagName(...)[0]未定义

浏览器:Firefox 26

也许这是DOM对象的问题,我通过以下方式创建它:

var xmlhttp;
if (window.XMLHttpRequest)
{
  xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function()
{
  if(xmlhttp.readyState==4 && xmlhttp.status==200)
  {
    xmlDoc = xmlhttp.responseXML;
Run Code Online (Sandbox Code Playgroud)

meg*_*wac 3

问题是节点之间的空格会自动成为文本节点。在尝试查找子节点之前,请检查 处的节点是否xmlDoc.documentElement.childNodes[i]为(nodeType 3)。在这个例子中,textNode我还删除了你的全局变量i和。key

http://jsfiddle.net/GQ8Kd/

var node, childNodes = xmlDoc.documentElement.childNodes;
for(var i = 0; i < childNodes.length; i++)
{
  node = childNodes[i];
  if(node.nodeType !== Node.TEXT_NODE) console.log(node.getElementsByTagName('child1')[0].textContent);
}
Run Code Online (Sandbox Code Playgroud)