Javascript/XML-获取节点名称

Javascript/XML-获取节点名称,javascript,xml,parsing,dom,Javascript,Xml,Parsing,Dom,我需要得到标签“myChild”和“content”的名称。 这很简单,但我困住了,困了,以下是我的测试结果: XML: 您需要标记名,它是元素的名称。(很抱歉,对于元素s,标记名和节点名是相同的。) 问题在于myParent元素的第一个子元素不是myChild元素,而是一个文本节点(包含空格)。您的结构如下所示: 元素“myParent” 带有回车符和一些空格或制表符的文本节点 元素“myChild” 带有“内容”的文本节点 带有回车符和一些空格或制表符的文本节点 元素“myPare

我需要得到标签“myChild”和“content”的名称。 这很简单,但我困住了,困了,以下是我的测试结果:

XML:

您需要
标记名
,它是元素的名称。(很抱歉,对于
元素
s,
标记名
节点名
是相同的。)

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

  • 元素“myParent”
    • 带有回车符和一些空格或制表符的文本节点
    • 元素“myChild”
      • 带有“内容”的文本节点
    • 带有回车符和一些空格或制表符的文本节点
  • 元素“myParent”
    • 带有回车符和一些空格或制表符的文本节点
    • 元素“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"
请注意,
元素
s没有有意义的
节点值
属性;而是收集它们的子文本节点。(更多信息请参见DOM规范:,)

还要注意,在索引到
节点列表时,索引从
0
开始。您似乎是从
1
开始的;如果出于某种原因跳过第一条注释,请忽略此注释



主题外:最好了解您正在使用的基本机制,我建议您使用纯DOM并参考上面列出的DOM规范。但是对于与这些树的交互,一个好的库是非常有用的,可以为您节省很多时间。可以很好地处理XML数据。我没有在XML中使用任何其他类似、或的方法,因此我不能这样说,但我希望至少有一些方法支持它。

尝试
x[1]。改为getElementsByTagName('*')[0]

(这仅适用于索引0,如果直接子节点包含更多的元素节点,则其他索引可能返回非子节点的元素。)

var x=xmlDoc.getElementsByTagName("myParent");
alert(x[1].childNodes[0].nodeName); //returns "#text" - "myChild" needed
alert(x[1].childNodes[0].nodeValue); //returns "" - "content" needed
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"