遍历XML文挡树的两种算法
深度优先遍历文挡树(递归方法):
广度优先遍历文挡树(非递归)
使用方法:
XmlDocument doc = new XmlDocument() ;
doc.Load("test.xml") ;
DOMDepthFirst(doc) ;
DOMBreadthFirst(doc) ;
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) ;