read leer example ejemplo documentelement create crear c# xml

leer - selectsinglenode c#



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

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 = @" <parent> <child> <nested /> </child> <child> <other> </other> </child> </parent> "; 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.


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

public static class XmlDocumentExtensions { public static void IterateThroughAllNodes( this XmlDocument doc, Action<XmlNode> elementVisitor) { if (doc != null && elementVisitor != null) { foreach (XmlNode node in doc.ChildNodes) { doIterateNode(node, elementVisitor); } } } private static void doIterateNode( XmlNode node, Action<XmlNode> 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); }


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 }