XMLReader verschachtelte Elemente
-
Hallo,
ich suche eine einfache Möglichkeit über einen XMLReader einen Wert einer bestimmten verschachtelten Knotenstruktur zu ermitteln z.B.
<A> <B> <X>Wert A.B.X</X> </B> <C> <X>Wert A.C.X</X> </C> </A>
Irgendwo habe ich mal eine Möglichkeit gesehen, wo man über die Elementnamen also hier z.B. <A>.<C>.<X> direkt an den Wert kommen kann. Ich bin mir nur nicht mehr sicher ob das C# war
Gruß
foo
-
Ich denke, dass man erst das gesamte Dokument laden und in eine innere Struktur umwandeln muß um es so abfragen zu können. Aber du kannst dir ja mal Linq2XML anschauen.
Als Start könntest du XDocument nehmen und dann mit Descendants() hinhangeln.
-
Hallo Witte,
danke für den Hinweis. XDocument/XPath können das in der Tat. Wahrscheinlich hatte ich das im Kopf.
Meine XML-Dateien können zum Teil größer als ein 1GB sein, da bin ich wohl auf den XMLReader und etwas handarbeit angewiesen.
Gruß
foo
-
Gründsätzlich kann man dies über XPath erreichen. .Net liefert dafür das
XPathDocument
.In Fall von diesem Beispiel, sollte es so funktionieren:
var doc = new XPathDocument("data.xml"); var navigator = doc.CreateNavigator(); var value = (string)navigator.Evaluate("/A/C/X");
Sonst gäbe es auch noch von
XmlReader
ein paar Methoden:using(XmlReader reader = XmlReader.Create("data.xml")) { reader.MoveToContent(); if(reader.ReadToDescendant("A") && reader.ReadToDescendant("C") && reader.ReadToDescendant("X")) { var value = reader.ReadString(); } }
Und wie witte gesagt hat, gibt es natürlich noch die Linq & XML Geschichte.
Grüssli
-
Hallo,
ich werde wohl beide Verfahren kombinieren: Über einen XMLReader die relevanten Baumteile lesen und über XmlReader.ReadSubtree an ein XPathDocument-Objekt übergeben.
Schönen Dank für die Tipps.
Gruß
foodax