Javascript递归不遍历备份链

Javascript递归不遍历备份链,javascript,html,xml,recursion,Javascript,Html,Xml,Recursion,我正在尝试创建一个HTML页面,该页面允许我以与您读取XML文件中元素的方式大致相同的方式输出XML文件中元素的所有节点名称,例如: <a> <b> <c></c> </b> <d> <e></e> </d> </a> 我使用Javascript函数递归遍历XML文档以实现这一点。但是,我创建的函数只遍历到最低级别一次,然后停止,生成,例如: a b c

我正在尝试创建一个HTML页面,该页面允许我以与您读取XML文件中元素的方式大致相同的方式输出XML文件中元素的所有节点名称,例如:

<a>
 <b>
  <c></c>
 </b>
 <d>
  <e></e>
 </d>
</a>
我使用Javascript函数递归遍历XML文档以实现这一点。但是,我创建的函数只遍历到最低级别一次,然后停止,生成,例如:

a
 b
  c
这是我的Javascript函数

函数printChildren(节点){
如果(node.childNodes.length>1){
y=xmlDoc.getElementsByTagName(node.nodeName)[0].childNodes;

因为(i=0;i你没有像你想象的那样得到孩子

if(node.childNodes.length > 1){
在这里,您只访问具有多个子节点的节点,但似乎您也希望访问节点的单个子节点,不是吗?然后,当您实际检索具有

  y=xmlDoc.getElementsByTagName(node.nodeName)[0].childNodes;
考虑如果有多个元素与
节点
同名,会发生什么情况;每次访问其中一个元素时,都会迭代使用该名称的第一个节点的子节点。在您的示例中,这不会发生,但如果


然后,当您尝试访问第二个
b
元素时,您将检索第一个
b
元素的子元素。为什么不直接访问
node.childNodes
?然后您可以执行以下操作:

y=node.childNodes;
for(i=0;i<y.length;i++){
y=node.childNodes;

因为(i=0;i你没有像你想象的那样得到孩子

if(node.childNodes.length > 1){
在这里,您只访问具有多个子节点的节点,但似乎您也希望访问节点的单个子节点,不是吗?然后,当您实际检索具有

  y=xmlDoc.getElementsByTagName(node.nodeName)[0].childNodes;
考虑如果有多个元素与
节点
同名,会发生什么情况;每次访问其中一个元素时,都会迭代使用该名称的第一个节点的子节点。在您的示例中,这不会发生,但如果


然后,当您尝试访问第二个
b
元素时,您将检索第一个
b
元素的子元素。为什么不直接访问
node.childNodes
?然后您可以执行以下操作:

y=node.childNodes;
for(i=0;i<y.length;i++){
y=node.childNodes;

对于(i=0;i这里有一种方法可以完成您试图完成的任务,确保您正确地抓取了节点。我使用了所有HTML来演示(JSFIDLE:--FIDLE似乎只有在您点击run后才会显示):


函数printChildren(节点,深度){
如果(!depth){depth=1;}
对于(变量x=0;x”);
printchildrends(node.childNodes[x],深度+1);
}
}
window.onload=函数(){
var root=document.getElementById('container');
打印子项(根);
}

这里有一种方法可以完成您想要完成的任务,确保正确抓取节点。我使用了所有HTML来演示(JSFIDLE:--FIDLE似乎只有在您点击run后才会显示):


函数printChildren(节点,深度){
如果(!depth){depth=1;}
对于(变量x=0;x”);
printchildrends(node.childNodes[x],深度+1);
}
}
window.onload=函数(){
var root=document.getElementById('container');
打印子项(根);
}

Wow,我是一个看不到这一点的笨蛋,这解释了我所经历的奇怪行为。因此我想我必须将这一行基本上分成两行,在一个变量中按名称获取标记,然后迭代结果并获取单个子项?Nvm,你完全正确,node.childNodes更有意义,干杯!W哦,我是个笨蛋,因为我没有看到这些,这解释了我一直在经历的奇怪行为。所以我想我必须把这行基本上分成两行,在一个变量中按名称获取标记,然后迭代结果并获取单个子项?Nvm,你完全正确,node.childNodes更有意义,干杯!谢谢对于一个非常清楚的例子,我感谢你花时间给出如此完整的答案。我接受了@Joshua Taylor的答案,因为它更清楚地解决了确切的问题。尽管如此,还是非常有用!感谢你给出了非常清楚的例子,我感谢你花时间给出如此完整的答案。我接受了@Joshua Taylor的答案泰勒的回答,因为它解决了确切的问题,但更清楚一点。谢谢,但仍然非常有用!