javascript - 按名称访问 XML DOM 子节点

标签 javascript xml dom

我想在 JavaScript 中访问 XML 对象的 textContent 属性。根项目有几个 child ,他们自己也有一些 child 。为了让 children 进入第一层,我只是遍历了根元素的 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>

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

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

这会导致一个消息框:undefined
和一个控制台错误:TypeError: key.getElementsByTagName(...)[0] is undefined

浏览器:Firefox 26

可能是DOM对象的问题,我是这样创建的:

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

最佳答案

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

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);
}

关于javascript - 按名称访问 XML DOM 子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407578/

相关文章:

javascript - 如何为 FabricJS 对象设置背景图像

java - 如何在android中同时渲染xml View 和java View

java - Dozer - 基于条件的映射

java - Java 读/写文件中的编码不正确

html - iframe 呈现与常规网页神秘不同?

Javascript下拉菜单onclick,(关闭其他菜单,当一个打开时)

javascript 到 jquery 的代码转换,该代码对于带有单选按钮的文本字段的动态外观和消失效果很好

javascript - 如何在动态html中添加逻辑否定(!)运算符

php - 使用 PHP 进行 XML 分页

javascript - 在 keydown 上使用 jquery 跳过 tr 选择