Verwenden von Visual C# zum Abfragen von XML mit einem XPath-Ausdruck
In diesem Artikel wird erläutert, wie Sie XPathDocument mithilfe der Klasse ein Objekt mit einem XPath-Ausdruck (XML Path Language) XPathNavigator 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 Namespace "Microsoft .NET Framework Class System.Xml.XPath Library".
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
Xml-Abfrage mit einem XPath-Ausdruck
Erstellen Sie eine neue Visual C#-Konsolenanwendung in Visual Studio.
Hinweis
- In diesem Beispiel wird eine Datei mit dem Namen Books.xml verwendet. Sie können eine eigene Books.xml-Datei erstellen oder das Beispiel verwenden, das im .NET Software Development Kit (SDK)-Schnellstart enthalten ist. Wenn Sie die Schnellstarts nicht installiert haben und sie nicht installieren möchten, finden Sie im Abschnitt "Verweise" den Downloadspeicherort Books.xml. Wenn Sie die Schnellstarts installiert haben, befindet sich die Datei im
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VBOrdner. Sie können die Datei in den Ordner kopieren, der\Bin\Debugsich unter dem Ordner befindet, in dem Sie dieses Projekt erstellt haben.
- In diesem Beispiel wird eine Datei mit dem Namen Books.xml verwendet. Sie können eine eigene Books.xml-Datei erstellen oder das Beispiel verwenden, das im .NET Software Development Kit (SDK)-Schnellstart enthalten ist. Wenn Sie die Schnellstarts nicht installiert haben und sie nicht installieren möchten, finden Sie im Abschnitt "Verweise" den Downloadspeicherort Books.xml. Wenn Sie die Schnellstarts installiert haben, befindet sich die Datei im
Stellen Sie sicher, dass das Projekt auf den
System.XmlNamespace verweist.Verwenden Sie die
usingAnweisung für dieXmlXPathUnd-Namespaces, damit Sie Deklarationen in diesen Namespaces später im Code nicht qualifizieren müssen. Sie können dieusingAnweisung wie folgt vor allen anderen Deklarationen verwenden:using System.Xml; using System.Xml.XPath;Deklarieren Sie die entsprechenden Variablen. Deklarieren Sie ein
XPathDocumentObjekt für das XML-Dokument, einXpathNavigatorObjekt zum Auswerten von XPath-Ausdrücken und einXPathNodeIteratorObjekt zum Durchlaufen ausgewählter Knoten. Deklarieren Sie einStringObjekt für die XPath-Ausdrücke. Fügen Sie den Deklarationscode in derMainFunktion inClass1hinzu.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;Laden Sie eine
XPathDocumentmit der Beispieldatei Books.xml. DieXPathDocumentKlasse verwendet Extensible Stylesheet Language Transformations (XSLT), um einen schnellen und leistungsorientierten Cache für die XML-Dokumentverarbeitung bereitzustellen. Sie ähnelt dem XML-Dom (Document Object Model), ist jedoch für die XSLT-Verarbeitung und dasXPathDatenmodell optimiert.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Erstellen Sie eine
XPathNavigatoraus dem Dokument. DasXPathNavigatorObjekt wird für schreibgeschützte XPath-Abfragen verwendet. Die XPath-Abfragen können einen resultierenden Wert oder viele Knoten zurückgeben.// 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
EvaluateMethode desXPathNavigatorObjekts, um den XPath-Ausdruck auszuwerten. DieEvaluateMethode 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 Us-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 einen
XPathNodeIteratorfür die Knoten, die mit der Methode der ausgewähltSelectXPathNavigatorsind. DiesXPathNodeIteratorstellt ein XPath-Knotensatz dar und unterstützt Vorgänge für dieses Nodeet.// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);Verwenden Sie die
XPathNodeIterator, die von der Methode von zurückgegebenSelectXPathNavigatorwurde, um durch die ausgewählten Knoten zu navigieren. In diesem Fall können Sie die Methode des verwenden,MoveNextum alle ausgewählten Knoten zuXPathNodeIteratordurchlaufen.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
ReadLineMethode, um eine Pause am Ende der Konsolenanzeige hinzuzufügen, um die oben genannten Ergebnisse besser 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, wird möglicherweise die folgende Ausnahmefehlermeldung angezeigt:
Eine unbehandelte Ausnahme vom Typ System.Xml. XmlException ist in System.xml.dll aufgetreten
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. Die Verarbeitungsanweisung kann beispielsweise überflüssige Leerzeichen enthalten. Das folgende Beispiel ist eine ungültige Verarbeitungsanweisung:
<?xml version='1.0' ?>
Um die Ausnahme zu beheben, verwenden Sie eine der folgenden Lösungen:
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.