我想在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]未定义
浏览器:Firefox 26
也许这是DOM对象的问题,我通过以下方式创建它:
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
xmlDoc = xmlhttp.responseXML;
答案 0 :(得分:3)
问题是节点之间的空间是自动生成的textNodes。在尝试查找子项之前,请检查xmlDoc.documentElement.childNodes[i]
处的节点是否为textNode
(nodeType 3)。在此示例中,我还删除了全局i
和key
。
var node, childNodes = xmlDoc.documentElement.childNodes;
for(var i = 0; i < childNodes.length; i++)
{
node = childNodes[i];
if(node.nodeType !== Node.TEXT_NODE) console.log(node.getElementsByTagName('child1')[0].textContent);
}
答案 1 :(得分:0)
使用以下命令为我获取所需的child1节点值。
var k = xmlDoc.getElementsByTagName("child1");
for(var i = 0; i < k.length; i++)
{
console.log(k[i].childNodes[0].nodeValue);
}
答案 2 :(得分:0)
尝试getElementsByTagName('child1')[0].nodeValue