Javascript 按名称访问XML DOM子节点

Javascript 按名称访问XML DOM子节点,javascript,xml,dom,Javascript,Xml,Dom,我想访问JavaScript中XML对象的textContent属性。根项有几个子项,这些子项本身也有一些子项。为了获得第一级的子级,我只需遍历根元素的childNodes数组。但是为了获得“孙子”的值,我想使用类似于getElementsByTagName()的东西,这是行不通的。目前,我只是再次遍历所有子项,并检查每个子项的nodeName属性以获取我的值有没有办法按名称获取子对象? XML(注意:我在内部得到的XML文档是未格式化的,没有空格,没有#文本节点): 使用以下命令可以为我获得所

我想访问JavaScript中XML对象的textContent属性。根项有几个子项,这些子项本身也有一些子项。为了获得第一级的子级,我只需遍历根元素的childNodes数组。但是为了获得“孙子”的值,我想使用类似于
getElementsByTagName()
的东西,这是行不通的。目前,我只是再次遍历所有子项,并检查每个子项的nodeName属性以获取我的值有没有办法按名称获取子对象?

XML(注意:我在内部得到的XML文档是未格式化的,没有空格,没有#文本节点):


使用以下命令可以为我获得所需的child1节点值

var k = xmlDoc.getElementsByTagName("child1");

for(var i = 0; i < k.length; i++)
{
  console.log(k[i].childNodes[0].nodeValue);
}
var k=xmlDoc.getElementsByTagName(“child1”); 对于(变量i=0;i尝试
getElementsByTagName('child1')[0]。节点评估值
问题是节点之间的空格自动变为textNodes。在尝试查找子节点之前,请检查
xmlDoc.documentElement.childNodes[i]
处的节点是否为
textNode
(节点类型3)。在本例中,我还删除了globals
I
key

var节点,childNodes=xmlDoc.documentElement.childNodes;
对于(var i=0;i
您遇到的第一个子节点是文本节点,因此没有任何名为
child1
的子节点……很抱歉。我在项目中使用的XML是未格式化的(没有任何空格),因此没有“#text”节点。这不能作为键使用。getElementsByTagName('child1')[0]已经不存在。您好,我检查了节点类型,它是1个元素\u nodery添加
console.log(node.nodeType)在循环中,您将看到有2个文本节点无文本节点。所有的输出都是1。将它与nodeName结合起来,检查我是否迭代了正确的节点。我知道如果XML文件中有空格,就会有文本节点,但是XML输出没有格式化。这只是一行没有空格的文字。你能更新我的小提琴使其断裂吗?因为据我所知,它在fineJFYI中工作,这是php后端中的一个bug,我搜索的节点不是为第一个元素创建的-只有在我用于测试的情况下-这就是为什么我总是出错的原因。但是,感谢您的帮助。.nodeValue属性始终未定义,我必须使用.textContent来获取节点值。除此之外,使用hhildNodes数组始终有效。@robin.koch。我又简化了我的答案。我想知道为什么这个当前版本不适合你。我愿意听取你的反馈。
xmlDoc = xmlhttp.responseXML;
for(i = 0; i < xmlDoc.documentElement.childNodes.length; i++)
{
  key = xmlDoc.documentElement.childNodes[i];
  alert(key.getElementsByTagName('child1')[0].textContent);
}
var xmlhttp;
if (window.XMLHttpRequest)
{
  xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function()
{
  if(xmlhttp.readyState==4 && xmlhttp.status==200)
  {
    xmlDoc = xmlhttp.responseXML;
var k = xmlDoc.getElementsByTagName("child1");

for(var i = 0; i < k.length; i++)
{
  console.log(k[i].childNodes[0].nodeValue);
}
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);
}