Ich möchte durchlaufen alle Knoten in einer XML-Datei und drucken Sie ihre Namen. Was ist der beste Weg, dies zu tun? Ich benutze .NET 2.0.Iterieren durch alle Knoten in XML-Datei
Antwort
Ich denke, der schnellste und einfachste Weg wäre, eine XmlReader zu verwenden, wird dies nicht erfordern eine Rekursion und minimalen Speicherbedarf.
Hier ist ein einfaches Beispiel für Kompaktheit habe ich nur einen einfachen String natürlich Sie einen Stream aus einer Datei usw.
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);
}
}
Das Ergebnis der oben wird
parent
child
nested
child
other
sein verwenden können
Eine Liste aller Elemente im XML-Dokument.
Sie können XmlDocument verwenden. Auch einige XPath können nützlich sein.
nur ein einfaches Beispiel
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
}
Ein rekursive Algorithmus, die XmlDocument
hier durch ein parst ist ein Beispiel - Recursively reading an xml document and using regex to get contents
Hier ist ein weiterer rekursiven Beispiel - http://www.java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html
Dies ist, was ich für mich schnell geschrieben:
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);
}
}
}
, es zu benutzen, habe ich verwendet, so etwas wie:
var doc = new XmlDocument();
doc.Load(somePath);
doc.IterateThroughAllNodes(
delegate(XmlNode node)
{
// ...Do something with the node...
});
Vielleicht hilft es jemand da draußen.
Das ist großartig! Ich habe eine Menge gelernt, indem ich diesen Code durchgegangen bin, danke fürs Teilen. – reggaeguitar
Verallgemeinerter Ansatz. +1 Ich bevorzuge diesen. – Silver
Um
XDocument xdoc = XDocument.Load("input.xml");
foreach (XElement element in xdoc.Descendants())
{
Console.WriteLine(element.Name);
}
bevorzugen, diese über 'XmlDocument' zu verwenden. Siehe: http://stackoverflow.com/questions/1542073/xdocument-or-xmldocument (sogar älter als diese Frage hier) –
- 1. Iterieren durch alle JDK-Klassen
- 2. Iterieren durch XML-Knoten von jquery jeden
- 3. Iterieren Sie alle XML-Knoten-Generationen in Java DOM
- 4. jstree jquery, wie man durch alle Knoten iteriert
- 5. Iterieren durch Ereignisprotokolleintragsauflistung, IndexOutOutOfBoundsException
- 6. iterieren durch alle Zeilen in der spezifischen Spalte openpyxl
- 7. Ant: Iterieren durch einen Knoten des XML-Datei
- 8. Knoten Async forEach - Wie durch Tasten statt Werte iterieren
- 9. Iterieren durch Seitenelemente beautifulsoup
- 10. Iterieren durch FormData in IE
- 11. Iterieren durch Objekt in AngularJs
- 12. Durch ein Array Iterieren
- 13. Iterieren durch Modellfelder - Django
- 14. Iterieren durch Produktvarianten
- 15. Wie durch alle aws Region iterieren Info Sicherheitsgruppe
- 16. PHP MySQL Spaltennamen Get Während durch alle Datensätze iterieren
- 17. Iterieren durch eine IList
- 18. „iterieren“ durch Methoden
- 19. Wie durch Datentabelle iterieren
- 20. Iterieren durch ein mehrdimensionales Array in Python
- 21. Verfahrgeschwindigkeit durch alle Knoten eines binären Baumes in Java
- 22. Perl: Iterieren durch INI-Dateien
- 23. Iterieren Durch ein Wörterbuch in Swift
- 24. Iterieren durch ein jQuery-Objektarray
- 25. Python: durch eine Liste iterieren
- 26. Schleife durch jeden Knoten
- 27. Python MySQLdb Iterieren durch Tabelle
- 28. Iterieren durch zwei dünne Matrizen
- 29. Iterieren schnell durch Outlook-Terminartikel
- 30. Iterieren durch eine Spark-RDD
dies durch alle Elemente iterieren bevorzugen, weil es den Start/End-Elemente und Inhalt als ein einzelnes Element behandelt, im Vergleich zur Verwendung XmlReader – Savage