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.Iterar a través de todos los nodos en el archivo XML
Respuesta
pienso la manera más rápida y simple sería usar un XmlReader, esto no requiere cualquier recursión y una mínima huella de memoria.
Aquí está un ejemplo sencillo, para la compacidad que acabo de utilizar una cadena simple, por supuesto, se puede utilizar una corriente 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.
Puede usar XmlDocument. También algo de XPath puede ser útil.
Sólo un ejemplo sencillo
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
}
Un algoritmo recursivo que analiza a través de un XmlDocument
Este es un ejemplo - Recursively reading an xml document and using regex to get contents
Aquí es otro ejemplo recursivo - http://www.java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html
Esto es lo que escribí rápidamente por mí mismo:
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...
});
Tal vez ayude a alguien por allí.
Esto es grande! Aprendí muchísimo al recorrer este código, gracias por compartir. – reggaeguitar
Enfoque generalizado. +1 Prefiero este. – Silver
para recorrer todos los elementos
XDocument xdoc = XDocument.Load("input.xml");
foreach (XElement element in xdoc.Descendants())
{
Console.WriteLine(element.Name);
}
prefieren usar esto sobre 'XmlDocument'. Ver: http://stackoverflow.com/questions/1542073/xdocument-or-xmldocument (incluso más antiguo que esta pregunta aquí) –
- 1. Cómo iterar a través de los nodos de XDocument
- 2. ¿Cómo puedo iterar a través de los Nodos de un campo XML en T-SQL?
- 3. ¿Es posible iterar a través de todos los nodos con py2neo
- 4. Cómo iterar a través de todos los objetos Bundle
- 5. rapidxml: ¿cómo iterar a través de los nodos? Deja fuera a último hermano
- 6. Iterar todas las generaciones de nodos XML en DOM DOM
- 7. Lea todos los nodos secundarios XML de cada nodo específico
- 8. ¿Cómo puedo iterar a través de los nodos secundarios de un nombre particular en un documento de documento Nokogiri XMLFragment?
- 9. matlab cómo iterar a través de todos los objetos en un área de trabajo
- 10. Ruta no cíclica a todos los nodos
- 11. Iterar a través de DataSet
- 12. C#: Obtener todos los nodos del documento XML
- 13. Iterar a través de todos Textareas con Javascript (jQuery)
- 14. Jquery - iterar a través de todas las etiquetas XML
- 15. ¿Cómo puedo iterar a través de elementos DOM en PHP?
- 16. Forma idiomática de iterar a través de todos los pares de una colección en Clojure
- 17. Iterar a través de cada archivo en un directorio
- 18. ¿Cómo puedo iterar a través de todos los Modelos en mi aplicación de rieles?
- 19. ¿Cómo iterar a través de todos los atributos en un elemento HTML?
- 20. Git: quiere iterar a través de todos los envíos en rama, y archivos de lista en cada confirmación
- 21. lua: iterar a través de todos los pares en la tabla
- 22. iterar a través de los parámetros de saltarse la primera
- 23. Iterar a través de los componentes de pestaña en JTabbedPane
- 24. Javascript-HTML: ¿cómo iterar a través de todos los formularios en una página?
- 25. mysql, iterar a través de los nombres de columna
- 26. Eliminar todos los nodos en jsTree
- 27. ¿Hay alguna forma de iterar a través de todos los valores enum?
- 28. Iterar a través de los parámetros del método
- 29. Iterar a través de todos los posibles valores de coma flotante
- 30. Cómo iterar a través de un fd_set
prefiere tener esto porque trata a los elementos de inicio/final y el contenido como un solo elemento, en comparación con el uso de XmlReader – Savage