bog*_*jov 3 javascript xml parsing dom
我需要获取标签"myChild"和"内容"的名称.这很简单,但我陷入困境,困了,这就是我的测试结果:
XML:
...
<myParent>
<myChild>content</myChild>
</myParent>
<myParent>
<myChild>content</myChild>
</myParent>
...
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
你想要的 (对不起,对于tagName
,这是元素的名称.Element
s,tagName
并且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"
Run Code Online (Sandbox Code Playgroud)
请注意,Element
s没有有意义的nodeValue
属性; 相反,您收集他们的子文本节点.(更多DOM规范:DOM2,DOM3.)
另请注意,索引到a时NodeList
,索引从0
.你似乎已经开始了1
; 如果您因某个原因跳过第一个注释,请忽略此注释.
偏离主题:总是最好理解你正在使用的基础机制,我建议你使用直接DOM并参考上面列出的DOM规范.但是为了与这些树进行交互,一个好的库可以真正有用,并为您节省大量时间.jQuery适用于XML数据.我没有使用任何其他像Prototype,YUI,Closure或其他任何一些 XML,所以不能说,但我希望至少有一些支持它.