遍历XML文挡树的两种算法

深度优先遍历文挡树(递归方法):

 1/**//// <summary>
 2  /// 深度优先遍历文挡树(递归方法)
 3  /// </summary>
 4  /// <param name="currentNode">当前节点</param>
 5  public void DOMDepthFirst(XmlNode currentNode)
 6  {
 7   XmlNode node = currentNode.FirstChild ;
 8   while ( node != null )
 9   {
10    DOMDepthFirst( node ) ;
11    node = node.NextSibling ;
12   }
13
14   //do something else with currentNode herer
15  }

广度优先遍历文挡树(非递归)

1  /**//// <summary>
 2  /// 广度优先遍历文挡树(非递归)
 3  /// </summary>
 4  /// <param name="root">遍历的入口点,如果需要遍历整个文挡则是XmlDocument对象</param>
 5  public void DOMBreadthFirst(XmlNode root)
 6  {
 7   Queue queue = new Queue() ;
 8   queue.Enqueue(root) ;
 9   XmlNode currentNode = null ;
10   try
11   {
12    while (true)
13    {
14     //如果queue为空,则抛错,跳出try section,这里是while循环的退出条件
15     currentNode = (XmlNode)queue.Dequeue() ;
16
17     if (currentNode.HasChildNodes)
18     {
19      foreach (XmlNode child in currentNode.ChildNodes)
20      {
21       queue.Enqueue(child) ;
22      }
23     }
24    }
25   }
26   catch(System.InvalidOperationException ex)
27   {
28    //throw ex ;
29   }
30  }
31

使用方法:

   XmlDocument doc = new XmlDocument() ;
   doc.Load("test.xml") ;
   DOMDepthFirst(doc) ;
   DOMBreadthFirst(doc) ;

posted on 2008-10-16 10:10  踏燕归来  阅读(778)  评论(1编辑  收藏  举报