Traverse the text block tree in depth first (recursive method ):
1/** // <summary> 2 // traverse the text block tree in depth first (recursive method) 3 /// </summary> 4 /// <param name = "currentNode"> current node </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} |
SPAN first traverses the text block tree (non-recursive)
1/** // <summary> 2 // The width first traverses the text block tree (non-recursive) 3 /// </summary> 4 // <param name = "root"> the traversal entry point. If you want to traverse the entire document block, it is an XmlDocument object. </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 // If the queue is empty, an error is thrown out of the try section. Here is the exit condition of the while loop. 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 |
Usage:
XmlDocument doc = new XmlDocument ();
Doc. Load ("test. xml ");
DOMDepthFirst (doc );
DOMBreadthFirst (doc );