在.Net framework下遍历XML文挡树的两种算法

本文介绍在ASP.NET中使用两种不同的算法遍历XML文档树的方法:深度优先遍历和广度优先遍历。深度优先遍历采用递归方式实现,而广度优先遍历则通过队列来实现。

在阅读ASP.NET_XML深入编程技术 (PDF格式)一书的时候,发现遍历树的两种算法:深度优先和广度优先遍历文挡树,前一种需要使用递归,后者则不需要,本人大学时期数据结构学的不好,每每涉及到树,总喜欢用递归,希望以后能根据需要选用一种,不过没有时间再系统地学习数据结构了,那就平时多学多记吧!
另外这个例子不错,还可以学到.net的XML DOM的一些操作方法.

 1ExpandedBlockStart.gifContractedBlock.gif/**/ /// <summary>
 2InBlock.gif  /// 深度优先遍历文挡树(递归方法)
 3InBlock.gif  /// </summary>
 4ExpandedBlockEnd.gif  /// <param name="currentNode">当前节点</param>

 5None.gif  public void  DOMDepthFirst(XmlNode currentNode)
 6ExpandedBlockStart.gifContractedBlock.gif  dot.gif {
 7InBlock.gif   XmlNode node = currentNode.FirstChild ;
 8InBlock.gif   while ( node != null )
 9ExpandedSubBlockStart.gifContractedSubBlock.gif   dot.gif{
10InBlock.gif    DOMDepthFirst( node ) ;
11InBlock.gif    node = node.NextSibling ;
12ExpandedSubBlockEnd.gif   }

13InBlock.gif
14InBlock.gif   //do something else with currentNode herer
15ExpandedBlockEnd.gif  }

 1ExpandedBlockStart.gifContractedBlock.gif  /**/ /// <summary>
 2InBlock.gif  /// 广度优先遍历文挡树(非递归)
 3InBlock.gif  /// </summary>
 4ExpandedBlockEnd.gif  /// <param name="root">遍历的入口点,如果需要遍历整个文挡则是XmlDocument对象</param>

 5None.gif  public void  DOMBreadthFirst(XmlNode root)
 6ExpandedBlockStart.gifContractedBlock.gif  dot.gif {
 7InBlock.gif   Queue queue = new Queue() ;
 8InBlock.gif   queue.Enqueue(root) ;
 9InBlock.gif   XmlNode currentNode = null ;
10InBlock.gif   try
11ExpandedSubBlockStart.gifContractedSubBlock.gif   dot.gif{
12InBlock.gif    while (true)
13ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
14InBlock.gif     //如果queue为空,则抛错,跳出try section,这里是while循环的退出条件
15InBlock.gif     currentNode = (XmlNode)queue.Dequeue() ;
16InBlock.gif
17InBlock.gif     if (currentNode.HasChildNodes)
18ExpandedSubBlockStart.gifContractedSubBlock.gif     dot.gif{
19InBlock.gif      foreach (XmlNode child in currentNode.ChildNodes)
20ExpandedSubBlockStart.gifContractedSubBlock.gif      dot.gif{
21InBlock.gif       queue.Enqueue(child) ;
22ExpandedSubBlockEnd.gif      }

23ExpandedSubBlockEnd.gif     }

24ExpandedSubBlockEnd.gif    }

25ExpandedSubBlockEnd.gif   }

26InBlock.gif   catch(System.InvalidOperationException ex)
27ExpandedSubBlockStart.gifContractedSubBlock.gif   dot.gif{
28InBlock.gif    //throw ex ;
29ExpandedSubBlockEnd.gif   }

30ExpandedBlockEnd.gif  }

31 None.gif
32None.gif

使用方法:
   XmlDocument doc = new XmlDocument() ;
   doc.Load("test.xml") ;
   DOMDepthFirst(doc) ;
   DOMBreadthFirst(doc) ;

转载于:https://www.cnblogs.com/kwklover/archive/2006/04/08/369888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值