Verwenden von Visual C# zum Abfragen von XML mit einem XPath-Ausdruck
In diesem Artikel wird beschrieben, wie Sie ein XPathDocument
Objekt mit einem XPath-Ausdruck (XML Path Language) mithilfe der XPathNavigator
-Klasse abfragen.
Ursprüngliche Produktversion: Visual Studio, .NET Framework
Ursprüngliche KB-Nummer: 308333
Zusammenfassung
XPath wird programmgesteuert verwendet, um Ausdrücke auszuwerten und bestimmte Knoten in einem Dokument auszuwählen.
Dieser Artikel bezieht sich auf den Microsoft .NET Framework-Klassenbibliotheksnamespace System.Xml.XPath
.
In diesem Artikel wird davon ausgegangen, dass Sie mit den folgenden Themen vertraut sind:
- Visual C#
- XML-Terminologie
- Erstellen und Lesen einer XML-Datei
- XPath-Syntax
Abfragen von XML mit einem XPath-Ausdruck
Erstellen Sie eine neue Visual C#-Konsolenanwendung in Visual Studio.
Hinweis
- In diesem Beispiel wird eine Datei namensBooks.xmlverwendet. Sie können eine eigene Books.xml-Datei erstellen oder das Beispiel verwenden, das in den Schnellstartanleitungen für .NET Software Development Kit (SDK) enthalten ist. Wenn Sie die Schnellstartanleitungen nicht installiert haben und sie nicht installieren möchten, finden Sie im Abschnitt Verweise den Books.xml Downloadspeicherorts. Wenn Sie die Schnellstartanleitungen installiert haben, befindet sich die Datei im
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB
Ordner. Sie können die Datei in den\Bin\Debug
Ordner kopieren, der sich unter dem Ordner befindet, in dem Sie dieses Projekt erstellt haben.
- In diesem Beispiel wird eine Datei namensBooks.xmlverwendet. Sie können eine eigene Books.xml-Datei erstellen oder das Beispiel verwenden, das in den Schnellstartanleitungen für .NET Software Development Kit (SDK) enthalten ist. Wenn Sie die Schnellstartanleitungen nicht installiert haben und sie nicht installieren möchten, finden Sie im Abschnitt Verweise den Books.xml Downloadspeicherorts. Wenn Sie die Schnellstartanleitungen installiert haben, befindet sich die Datei im
Stellen Sie sicher, dass das Projekt auf den
System.Xml
Namespace verweist.Verwenden Sie die
using
-Anweisung für dieXml
Namespaces undXPath
, damit Sie Deklarationen in diesen Namespaces später in Ihrem Code nicht qualifizieren müssen. Sie können dieusing
-Anweisung wie folgt vor allen anderen Deklarationen verwenden:using System.Xml; using System.Xml.XPath;
Deklarieren Sie die entsprechenden Variablen. Deklarieren Sie ein
XPathDocument
Objekt, das das XML-Dokument enthält, einXpathNavigator
Objekt zum Auswerten von XPath-Ausdrücken und einXPathNodeIterator
Objekt zum Durchlaufen ausgewählter Knoten. Deklarieren Sie einString
-Objekt, das die XPath-Ausdrücke enthält. Fügen Sie den Deklarationscode in derMain
-Funktion inClass1
hinzu.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
Laden Sie eine
XPathDocument
mit der Beispieldatei Books.xml. DieXPathDocument
-Klasse verwendet XSLT (Extensible Stylesheet Language Transformations), um einen schnellen und leistungsorientierten Cache für die XML-Dokumentverarbeitung bereitzustellen. Es ähnelt dem XML-Dokumentobjektmodell (DOM), ist aber stark für die XSLT-Verarbeitung und dasXPath
Datenmodell optimiert.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
Erstellen Sie eine
XPathNavigator
aus dem Dokument. DasXPathNavigator
-Objekt wird für schreibgeschützte XPath-Abfragen verwendet. Die XPath-Abfragen geben möglicherweise einen resultierenden Wert oder viele Knoten zurück.// Create a navigator to query with XPath. nav = docNav.CreateNavigator();
Erstellen Sie einen XPath-Ausdruck, um die durchschnittlichen Kosten eines Buchs zu ermitteln. Dieser XPath-Ausdruck gibt einen einzelnen Wert zurück. Ausführliche Informationen zur XPath-Syntax finden Sie unter XPath-Syntax im Abschnitt Verweise .
// Find the average cost of a book. // This expression uses standard XPath syntax. strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
Verwenden Sie die
Evaluate
-Methode desXPathNavigator
-Objekts, um den XPath-Ausdruck auszuwerten. DieEvaluate
-Methode gibt die Ergebnisse des Ausdrucks zurück.// Use the Evaluate method to return the evaluated expression. Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
Erstellen Sie einen XPath-Ausdruck, um alle Bücher zu finden, die mehr als 10 Dollar kosten. Dieser XPath-Ausdruck gibt nur Title-Knoten aus der XML-Quelle zurück.
// Find the title of the books that are greater then $10.00. strExpression = "/bookstore/book/title[../price>10.00]";
Erstellen Sie eine
XPathNodeIterator
für die Knoten, die mit derSelect
-Methode desXPathNavigator
ausgewählt werden. stelltXPathNodeIterator
ein XPath-Knotensatz dar und unterstützt Vorgänge für dieses Knotenset.// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);
Verwenden Sie die
XPathNodeIterator
, die von derSelect
-Methode vonXPathNavigator
zurückgegeben wurde, um durch die ausgewählten Knoten zu navigieren. In diesem Fall können Sie dieMoveNext
-Methode vonXPathNodeIterator
verwenden, um alle ausgewählten Knoten zu durchlaufen.Console.WriteLine("List of expensive books:"); //Iterate through the results showing the element value. while (NodeIter.MoveNext()) { Console.WriteLine("Book Title: {0}", NodeIter.Current.Value); };
Verwenden Sie die
ReadLine
-Methode, um eine Pause am Ende der Konsolenanzeige hinzuzufügen, um die oben genannten Ergebnisse leichter anzuzeigen.// Pause Console.ReadLine();
Erstellen Sie Ihr Projekt, und führen Sie es aus.
Hinweis
Die Ergebnisse werden im Konsolenfenster angezeigt.
Problembehandlung
Wenn Sie den Code testen, erhalten Sie möglicherweise die folgende Ausnahmefehlermeldung:
Eine nicht behandelte Ausnahme vom Typ System.Xml. XmlException in System.xml.dll
Zusätzliche Informationen: Systemfehler.
Der Ausnahmefehler tritt in der folgenden Codezeile auf:
docNav = new XPathDocument("c:\\books.xml");
Der Ausnahmefehler wird durch eine ungültige Verarbeitungsanweisung verursacht. Beispielsweise kann die Verarbeitungsanweisung überflüssige Leerzeichen enthalten. Das folgende Beispiel ist eine ungültige Verarbeitungsanweisung:
<?xml version='1.0' ?>
Verwenden Sie eine der folgenden Lösungen, um die Ausnahme zu beheben:
Korrigieren Sie die ungültige Verarbeitungsanweisung. Das folgende Beispiel ist eine gültige Verarbeitungsanweisung:
<?xml version='1.0'?>
Entfernen Sie die XML-Verarbeitungsanweisung aus der Books.xml-Datei.
References
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für