CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  XML/SOAP

XML遍历问题

楼主rotApple(烂苹果)2005-11-30 14:41:33 在 Web 开发 / XML/SOAP 提问

我写了一个遍历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把我搞得好晕啊。。。。。。  
  希望有人帮我解答给个小example,万分感谢!!!  
   
  其实我现在需要的是按层遍历。 问题点数:100、回复次数:15Top

1 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-11-30 16:38:37 得分 10

up  
  思考一下  
  Top

2 楼moodboy1982(老鹰)回复于 2005-11-30 16:41:39 得分 0

你上面的那种XML格式是什么意思?要实现什么功能?Top

3 楼dh20156(风之石)回复于 2005-11-30 16:45:40 得分 10

这个对你可能有帮助:  
  http://blog.csdn.net/dh20156/archive/2005/05/12/373830.aspxTop

4 楼qhgary(Gary)回复于 2005-11-30 17:47:14 得分 20

其实你的要求就是如何用数组来存储树的结构。  
  一般我们是用链表来做,但是也可以用数组来存储。实际上通过“父id号”  
  就能够知道每个节点有几个孩子。比如“父id号”=1的有4个,那么就说明  
  id=1的这个结点,也就是root节点一共有4个孩子。分别是2,3,4,7。也  
  就是对应的a,b,c,f。  
   
  这个数组填写起来也很容易,不过首先你要知道有多少个数据,用来分配这个  
  表格的大小,然后第一列总归是1,2,3,4,5,6,7,且1对应的父id应该是0,就是  
  root节点。然后看这个数的第一层为a,b,c,f,那么将2,3,4,7对应的父id填写  
  成为1,因为他们的父节点都是root。然后看第二层,...依此类推。  
   
                                            root(1)  
                          a(2)     b(3)     c(4)     f(7)  
                                            d(5)   e(6)Top

5 楼czq9966(宁录)(毛主席领导咱闹革命……)回复于 2005-11-30 17:55:48 得分 0

UPTop

6 楼donghid(想得太多,快要疯掉了!神哪,让我静下来)回复于 2005-11-30 19:26:28 得分 0

你要怎么存,用一维数组来存?Top

7 楼rotApple(烂苹果)回复于 2005-12-01 14:30:23 得分 0

donghid(想得太多,快要疯掉了!神哪,让我静下来)  
  用二维  
  用对列  
  随便。  
   
  qhgary(Gary)  
  说的我有些糊涂,可以写一个小例子吗?  
   
  moodboy1982(虎落平川被犬欺)  
  这个XML只是用来表示一下的  
  我的意思就是把一个XML文件内的所有节的父子关系用数组存起来  
   
   
  其实我只是这样写!反正大家有什么好的方法都可以说嘛,不一定非要我这样用数组,什么存方便就用什么存!!谢谢大家了!Top

8 楼cunsh(村少)回复于 2005-12-01 15:15:17 得分 0

队列.Top

9 楼rotApple(烂苹果)回复于 2005-12-01 16:02:16 得分 0

dh20156(风之石)  
  看了你写的那个了,其实不是我要的,你写的只是普通的递归,可是这种是没用的  
  现在我要的是:  
  <root>  
          <item1/>  
          <item2>  
                <sub-itme1/>  
                <sub-item2>  
                          <otheritem/>  
                </sub-item2>  
          </item2>  
          <item3>  
                  <xxxxx/>  
          </item3>  
  </root>  
  你的遍历是root->item1->item2->sub-item1->sub-item2->otheritem->item3->xxxxxx这样遍历的,也就是说把一个节的深入完成后,再去遍历自己的兄弟节。  
  但问题是,现在我希望可以以层来遍历,也就按兄弟一层一层的遍历。Top

10 楼donghid(想得太多,快要疯掉了!神哪,让我静下来)回复于 2005-12-01 16:43:10 得分 0

你的id设置有问题吖  
  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是递增的,分明就是按深度遍历呀,但你却要求按层遍历!这样的要求我无法写!  
  如果要按层遍历,那么就应该是这样的:  
  id号       父id号  
  1               0       //这个是<root>   第一个不用管,默认为零,ID号是递增的  
  2               1       //这个是<a>  
  3               1       //这个是<b>  
  4               1       //这个是<c>  
  6               4       //这个是<d>  
  7               4       //这个是<e>  
  5               1       //这个是<f>  
  你要先搞清楚结构Top

11 楼qhgary(Gary)回复于 2005-12-01 16:53:20 得分 0

我说的很清楚了,你光看是没有用的,你要拿一个笔跟着画一下。  
  id号       父id号  
  1               0       //这个是<root>  
  2               1       //这个是<a>  
  3               1       //这个是<b>  
  4               1       //这个是<c>  
  5               4       //这个是<d>  
  6               4       //这个是<e>  
  7               1       //这个是<f>  
   
  这不就是一个table麽,也就是一个数组啊。可以认为就是一个1维数组。  
  比如存放在int   tree[8]这个数组里面,其中tree[0]不用,为了和编号一致。  
  剩下的tree[1]=0,   tree[2]=1,...   tree[7]=1,就表示出来上面那个表了。  
  tree[2],tree[3],tree[4],tree[7]的值都是1,证明这4个节点是tree[1]这个  
  节点的子节点。也就是说a,b,c,f是root的4个字节点。而tree[5],tree[6]的  
  值是4,说明tree[5],   tree[6]是tree[4]的子节点,也就是说d,e是c的2个子节点。  
  另外tree[1]就是root,在最上面,这个树的图不是就画出来了麽?怎么还不清楚?Top

12 楼donghid(想得太多,快要疯掉了!神哪,让我静下来)回复于 2005-12-01 18:03:06 得分 60

按层遍历的代码:  
  <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>Top

13 楼rotApple(烂苹果)回复于 2005-12-05 11:57:31 得分 0

问题OK!  
   
  特别谢谢:   donghid(想得太多,快要疯掉了!神哪,让我静下来)    
   
  谢谢:  
    qhgary(Gary)  
    sankt(黄景天)  
    dh20156(风之石)Top

14 楼manyou(他山之石【养万头猪,行万里路】)回复于 2005-12-05 12:40:51 得分 0

偶三年前已解决了  
  http://blog.csdn.net/manyou/archive/2003/10/02/18729.aspxTop

15 楼rotApple(烂苹果)回复于 2005-12-05 12:57:39 得分 0

也谢谢大家!!Top

相关问题

  • 遍历XML数的问题
  • XML遍历和编码问题
  • 怎样遍历XML格式的字串?
  • 如何遍历一个XML文件所有的节点
  • 如何在XSLT中遍历XML节点的所有属性?
  • 我有一段xml代码,怎样遍历显示在listview上?
  • js如何遍历取得xml中每个字节点的值
  • 求MSXML遍历读取xml节点的示例代码
  • 紧急问题:循环遍历多个xml文件
  • 谁有层序遍历XML文档DOM树的VB代码?高分求教!!!

关键词

  • .net
  • 节点
  • root
  • xml
  • 遍历
  • tree
  • 数组
  • 层
  • 谢谢
  • 递增

得分解答快速导航

  • 帖主:rotApple
  • sankt
  • dh20156
  • qhgary
  • donghid

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo