我需要获取标签“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
答案 0 :(得分:6)
您想要 (对不起,对于tagName
,这是该元素的名称。Element
,tagName
和{{ 1}}是相同的。)
问题是nodeName
元素的第一个子元素不是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"
没有有意义的Element
属性;相反,您收集他们的子文本节点。 (更多DOM规范:DOM2,DOM3。)
另请注意,在索引到nodeValue
时,索引从NodeList
开始。你好像是从0
开始的;如果你出于某种原因跳过第一个,请忽略此评论。
偏离主题:了解您正在使用的内容的基础机制总是最好的,我建议您使用直接DOM并参考上面列出的DOM规范。但是为了与这些树进行交互,一个好的库可以真正有用,并为您节省大量时间。 jQuery适用于XML数据。我没有使用其他任何内容,例如Prototype,YUI,Closure或any of several others和XML,所以不能说到这一点,但我至少期待他们中的一些人支持它。
答案 1 :(得分:0)
请尝试x[1].getElementsByTagName('*')[0]
。
(这仅对索引0可信,如果直接子节点包含更多元素节点,则其他索引可能返回不是子节点的元素。)