Javascript / XML - 获取节点名称

时间:2011-05-05 12:00:36

标签: 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

2 个答案:

答案 0 :(得分:6)

您想要tagName,这是该元素的名称。 (对不起,对于ElementtagName和{{ 1}}是相同的。)

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

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

您需要向下导航到实际myChild元素,您可以再次使用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属性;相反,您收集他们的子文本节点。 (更多DOM规范:DOM2DOM3。)

另请注意,在索引到nodeValue时,索引从NodeList开始。你好像是从0开始的;如果你出于某种原因跳过第一个,请忽略此评论。


偏离主题:了解您正在使用的内容的基础机制总是最好的,我建议您使用直接DOM并参考上面列出的DOM规范。但是为了与这些树进行交互,一个好的库可以真正有用,并为您节省大量时间。 jQuery适用于XML数据。我没有使用其他任何内容,例如PrototypeYUIClosureany of several others和XML,所以不能说到这一点,但我至少期待他们中的一些人支持它。

答案 1 :(得分:0)

请尝试x[1].getElementsByTagName('*')[0]

(这仅对索引0可信,如果直接子节点包含更多元素节点,则其他索引可能返回不是子节点的元素。)