我正在尝试创建一个 HTML 页面,该页面允许我以与您阅读它们的方式大致相同的方式输出 XML 文件中元素的所有节点名称,例如:
<a>
<b>
<c></c>
</b>
<d>
<e></e>
</d>
</a>
将输出:
a
b
c
d
e
我使用 Javascript 函数递归遍历 XML 文档来实现此目的。然而,我创建的函数只遍历到最低级别一次,然后停止,产生,例如:
a
b
c
这是我的 Javascript 函数
function printChildren(node){
if(node.childNodes.length > 1){
y=xmlDoc.getElementsByTagName(node.nodeName)[0].childNodes;
for(i=0;i<y.length;i++){
if(y[i].nodeName!="#text"){
document.write("<br>--->" + y[i].nodeName);
alert(y[i].nodeName);
printChildren(y[i]);
};
};
};
};
我不确定我的方法是否错误,或者函数是否在完成第一级递归后就中断了。我正在 Mozilla Firefox 中对此进行测试,以防这是由于浏览器的某些怪癖造成的。
最佳答案
这是完成您想要完成的任务的一种方法,请确保您正确捕获节点。我使用了所有 HTML 来演示(JSFIDDLE:http://jsfiddle.net/6WNdZ/ - fiddle 似乎只在您点击运行后才显示):
<hmtl>
<head>
<script>
function printChildren(node, depth) {
if (!depth) { depth = 1; }
for(var x = 0; x < node.childNodes.length; ++x) {
if (node.childNodes[x].nodeName == '#text') { continue; }
var space = '';
for(var y = 0; y < depth; ++y) {
space += " ";
}
document.write(space + node.childNodes[x].nodeName + "<br />");
printChildren(node.childNodes[x], depth + 1);
}
}
window.onload = function() {
var root = document.getElementById('container');
printChildren(root);
}
</script>
</head>
<body>
<div id='container'>
<a>
<b>
<c></c>
</b>
<d>
<e></e>
</d>
</a>
</div>
</body>
</html>
关于Javascript递归不遍历链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18497394/