Javascript/XML - 获取节点名称
问题描述:
我需要获取标签“myChild”和“内容”的名称。 这很简单,但我卡住了,困了,这里是我得到我的测试:Javascript/XML - 获取节点名称
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
S,tagName
和nodeName
是相同的。)
的问题是,你的myParent
元素的第一个孩子是不是myChild
元素,它是一个文本节点(含空格) 。您的结构是这样的:
- 元素“myParent”用回车和一些空格或制表符
- 文本节点
- 元素“myChild”与“内容”
- 文本节点
- 带回车符和一些空格或制表符的文本节点
- 元素“myParent”以回车和一些空格或制表符
- 文本节点
- 元素“myChild”与“内容”
- 文本节点与滑架
- 文本节点返回有的空格或制表符
你的东东d向下进入实际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,所以不能说话,但我希望至少有一些人支持它。
答
改为尝试x[1].getElementsByTagName('*')[0]
。
(这仅仅是指数0可信,其他指标可以退回没有子节点元素,如果直接孩子的含有其它元素节点。)
@TJ +1非常好。 – 2011-05-05 12:12:32