我写了一个遍历XML文件的一个小代码,现在我是想把遍历时的父子关系用ID号来保存到数组(不是数组也行),怎么办呢?比如:
<?xml version="1.0" encoding="gbk"?>
<root>
<a/>
<b/>
<c>
<d/>
<e/>
</c>
<f/>
</root>
我要保存这样的:
id号 父id号
1 0 //这个是<root> 第一个不用管,默认为零,ID号是递增的
2 1 //这个是<a>
3 1 //这个是<b>
4 1 //这个是<c>
5 4 //这个是<d>
6 4 //这个是<e>
7 1 //这个是<f>
我遍历时是用的递规,可是这个ID把我搞得好晕。其实我现在需要的是按层遍历。
按层遍历的代码:
<script>
var qNode=new Array;
var qCID=new Array;
var qPID=new Array;
var curID=1;
var xmldoc=new ActiveXObject('Microsoft.XMLDOM');
xmldoc.load('data.xml');
var oRoot=xmldoc.documentElement;
childs(oRoot,1,0);
function popQ(obj){//出队
var cur=obj[0];
obj.reverse();
obj.length--;
obj.reverse();
return(cur);
}
function childs(Node,cID,parentID){
alert("当前结点:"+Node.nodeName+" ID="+cID+" 父ID="+parentID);
var childNodes=Node.childNodes;
if(childNodes.length!=0)
{
for(var i=0;i<childNodes.length;i++){
curID++;
qNode[qNode.length]=childNodes[i];//入队
qCID[qCID.length]=curID;//自己的ID
qPID[qPID.length]=cID;//父ID
}
if(qNode.length!=0){
childs(popQ(qNode),popQ(qCID),popQ(qPID));
}
}
else
{
if(qNode.length!=0){
childs(popQ(qNode),popQ(qCID),popQ(qPID));
}
}
}
</script>
