【发布时间】:2014-02-19 20:50:56
【问题描述】:
我想在 JavaScript 中访问 XML 对象的 textContent 属性。根项目有几个孩子,他们自己也有一些孩子。为了让子级处于第一级,我只需遍历根元素的 childNodes 数组。但是要获得“孙子”的值,我想使用类似getElementsByTagName() 的东西,但这是行不通的。目前我只是再次遍历所有孩子并检查每个孩子的 nodeName 属性以获取我的值。 有没有办法通过名称获取子对象?
XML(注意:我内部得到的 XML 文档未格式化,没有空格,没有 #text 节点):
<root>
<element>
<child1>content</child1>
<child2>content</child2>
<child3>content</child3>
</element>
<element>
<child1>content</child1>
<child2>content</child2>
<child3>content</child3>
</element>
</root>
到目前为止我尝试了什么:
xmlDoc = xmlhttp.responseXML;
for(i = 0; i < xmlDoc.documentElement.childNodes.length; i++)
{
key = xmlDoc.documentElement.childNodes[i];
alert(key.getElementsByTagName('child1')[0].textContent);
}
这会导致一个消息框:undefined
和控制台错误:TypeError: key.getElementsByTagName(...)[0] is undefined
浏览器:Firefox 26
可能是 DOM 对象的问题,我是这样创建的:
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
xmlDoc = xmlhttp.responseXML;
【问题讨论】:
-
您遇到的第一个子节点是一个文本节点,因此没有任何名为
child1的子节点... -
对不起。我在项目中使用的 XML 未格式化(没有任何空格),因此没有“#text”节点。
标签: javascript xml dom