我需要获取标签“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
,这是元素的名称。Element
,tagName
和 nodeName
是一样的。)
问题是您的 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 规范中:DOM2、DOM3。)
另请注意,当索引到 NodeList
时,索引从 0
开始。您似乎是从 1
开始的;如果您出于某种原因跳过第一个评论,请忽略此评论。
题外话:了解您正在使用的内容的底层机制总是最好的,我建议您尝试使用直接 DOM 并引用上面列出的 DOM 规范。但是对于与这些树进行交互,一个好的库真的很有用,可以节省你很多时间。 jQuery适用于 XML 数据。我没有用过任何其他的,比如 Prototype , YUI , Closure , 或 any of several others使用 XML,所以不能这么说,但我希望至少他们中的一些人支持它。
关于Javascript/XML - 获取节点名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897315/