Javascript/XML - 获取节点名称

标签 javascript xml parsing dom

我需要获取标签“myChild”的名称和“内容”。 这很简单,但我困住了,昏昏欲睡,这是我通过测试得到的结果:

XML:

...
<myParent>
  <myChild>content</myChild>
</myParent>
<myParent>
  <myChild>content</myChild>
</myParent>
...

JS:

var x=xmlDoc.getElementsByTagName("myParent");
alert(x[1].childNodes[0].nodeName); //returns "#text" - "myChild" needed
alert(x[1].childNodes[0].nodeValue); //returns "" - "content" needed

最佳答案

您需要 tagName,这是元素的名称。 (抱歉,对于 ElementtagNamenodeName 是一样的。)

问题是您的 myParent 元素的第一个子元素不是 myChild 元素,它是一个文本节点(包含空格)。您的结构如下所示:

  • 元素“myParent”
    • 带有回车符和一些空格或制表符的文本节点
    • 元素“我的 child ”
      • 带有“内容”的文本节点
    • 带有回车符和一些空格或制表符的文本节点
  • 元素“myParent”
    • 带有回车符和一些空格或制表符的文本节点
    • 元素“我的 child ”
      • 带有“内容”的文本节点
    • 带有回车符和一些空格或制表符的文本节点

您需要向下导航到实际的 myChild 元素,您可以再次使用 getElementsByTagName 或仅通过扫描来完成此操作:

var x=xmlDoc.getElementsByTagName("myParent");
var c = x[1].firstChild;
while (c && c.nodeType != 1) { // 1 = ELEMENT_NODE
    c = c.nextSibling;
}
alert(c.nodeName); // "myChild"

请注意,Element 没有有意义的 nodeValue 属性;相反,您收集它们的子文本节点。 (更多内容在 DOM 规范中:DOM2DOM3。)

另请注意,当索引到 NodeList 时,索引从 0 开始。您似乎是从 1 开始的;如果您出于某种原因跳过第一个评论,请忽略此评论。


题外话:了解您正在使用的内容的底层机制总是最好的,我建议您尝试使用直接 DOM 并引用上面列出的 DOM 规范。但是对于与这些树进行交互,一个好的库真的很有用,可以节省你很多时间。 jQuery适用于 XML 数据。我没有用过任何其他的,比如 Prototype , YUI , Closure , 或 any of several others使用 XML,所以不能这么说,但我希望至少他们中的一些人支持它。

关于Javascript/XML - 获取节点名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897315/

相关文章:

java - 解码时忽略命名空间 : JAXB

java - xml 文件不更新。这是什么原因呢?

Javascript parseInt() 在包含数字的字符串文字上返回 NaN

javascript - jquery奇怪地解析自定义标签

xml - Golang Gokogiri递归xpath异常

python - 我不明白如何迭代 json 文件

javascript - jquery中如何从字符串中获取最后一个单词

javascript - 是否有任何非 eval 方法来创建具有运行时确定名称的函数?

javascript - Node.js : Make a response on the same page (update the page)

javascript - 具有不同模块的 AngularJS DI