Iterar a través de todos los nodos en el archivo XML

Quiero iterar a través de todos los nodos en un archivo XML e imprimir sus nombres. ¿Cuál es la mejor manera de hacer esto? Estoy usando .NET 2.0.

Creo que la forma más rápida y simple sería usar un XmlReader , esto no requerirá ninguna recursión y una mínima huella de memoria.

Aquí hay un ejemplo simple, por compacidad, simplemente utilicé una cadena simple por supuesto, puede usar una secuencia de un archivo, etc.

string xml = @"          "; XmlReader rdr = XmlReader.Create(new System.IO.StringReader(xml)); while (rdr.Read()) { if (rdr.NodeType == XmlNodeType.Element) { Console.WriteLine(rdr.LocalName); } } 

El resultado de lo anterior será

 parent child nested child other 

Una lista de todos los elementos en el documento XML.

Puede usar XmlDocument . También algo de XPath puede ser útil.

Solo un simple ejemplo

 XmlDocument doc = new XmlDocument(); doc.Load("sample.xml"); XmlElement root = doc.DocumentElement; XmlNodeList nodes = root.SelectNodes("some_node"); // You can also use XPath here foreach (XmlNode node in nodes) { // use node variable here for your beeds } 

Esto es lo que rápidamente escribí para mí:

 public static class XmlDocumentExtensions { public static void IterateThroughAllNodes( this XmlDocument doc, Action elementVisitor) { if (doc != null && elementVisitor != null) { foreach (XmlNode node in doc.ChildNodes) { doIterateNode(node, elementVisitor); } } } private static void doIterateNode( XmlNode node, Action elementVisitor) { elementVisitor(node); foreach (XmlNode childNode in node.ChildNodes) { doIterateNode(childNode, elementVisitor); } } } 

Para usarlo, he usado algo como:

 var doc = new XmlDocument(); doc.Load(somePath); doc.IterateThroughAllNodes( delegate(XmlNode node) { // ...Do something with the node... }); 

Quizás ayude a alguien allá afuera.

Para iterar a través de todos los elementos

 XDocument xdoc = XDocument.Load("input.xml"); foreach (XElement element in xdoc.Descendants()) { Console.WriteLine(element.Name); } 

Un algoritmo recursivo que analiza a través de un XmlDocument

Aquí hay un ejemplo: Lectura recursiva de un documento xml y uso de expresiones regulares para obtener contenidos

Aquí hay otro ejemplo recursivo: http://www.java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html