Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Sie ein XPathDocument Objekt mithilfe eines XML Path Language (XPath)-Ausdrucks und der XPathNavigator Klasse abfragen.
XPath wird programmgesteuert verwendet, um Ausdrücke auszuwerten und bestimmte Knoten in einem Dokument auszuwählen.
Dieser Artikel bezieht sich auf den Namespace der Microsoft .NET Framework-Klassenbibliothek. System.Xml.XPath
Gilt für: Visual Studio, .NET Framework
Ursprüngliche KB-Nummer: 308333
Voraussetzungen
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
Abfrage eines XPathDocuments mit einem XPath-Ausdruck
Erstellen Sie in Microsoft Visual Studio eine Visual C#-Konsolenanwendung.
Notiz
In diesem Beispiel wird eine Datei mit dem Namen Books.xmlverwendet. Sie können eine eigene Books.xml-Datei erstellen, oder Sie können das Beispiel verwenden, das in den Schnellstarts von .NET Software Development Kit (SDK) enthalten ist.
Wenn Sie die Schnellstarts nicht installiert haben und sie nicht installieren möchten, lesen Sie den Abschnitt "Verwandte Inhalte", um den Download-Ort Books.xml zu finden.
Wenn Sie die Schnellstarts installiert haben, finden Sie die Books.xml Datei im
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VBOrdner. Sie können die Datei in den\Bin\DebugUnterordner des Ordners kopieren, in dem Sie dieses Projekt erstellt haben.Stellen Sie sicher, dass das Projekt auf den
System.XmlNamespace verweist.Verwenden Sie die
usingAnweisung für die Namespaces undXmldieXPathNamespaces, damit Sie Deklarationen in diesen Namespaces später im Code nicht qualifizieren müssen. Sie können dieusingAnweisung vor anderen Deklarationen wie folgt verwenden:using System.Xml; using System.Xml.XPath;Deklarieren Sie die entsprechenden Variablen. Deklarieren Sie ein
XPathDocumentObjekt, das das XML-Dokument enthält, einXpathNavigatorObjekt zum Auswerten von XPath-Ausdrücken und einXPathNodeIteratorObjekt, das durch ausgewählte Knoten durchlaufen werden soll. Deklarieren Sie einStringObjekt, das die XPath-Ausdrücke enthält. Fügen Sie den Deklarationscode zu der FunktionMaininClass1hinzu.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;Laden Sie eine
XPathDocumentzusammen mit der Beispieldatei Books.xml. DieXPathDocumentKlasse verwendet XSLT (Extensible Stylesheet Language Transformations), um einen schnellen und leistungsorientierten Cache für die XML-Dokumentverarbeitung bereitzustellen. Das XML-Dom (Document Object Model) ähnelt dem XML-Dokumentobjektmodell, ist aber für XSLT-Verarbeitung und dasXPathDatenmodell hoch optimiert.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Erstellen Sie ein
XPathNavigatorDokument aus dem Dokument. DasXPathNavigatorObjekt 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
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 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 ein
XPathNodeIterator, das sich auf die Knoten bezieht, die zusammen mit derSelect-Methode desXPathNavigatorausgewählt sind. DasXPathNodeIteratorstellt ein XPath-Knotenet dar und unterstützt Vorgänge in diesem Knotenet.// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);Um durch die ausgewählten Knoten zu navigieren, verwenden Sie die
XPathNodeIterator, die von der MethodeSelectvonXPathNavigatorzurückgegeben wurde. In diesem Fall können Sie dieMoveNextMethode derXPathNodeIteratorverwenden, um über alle ausgewählten Knoten zu iterieren.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 am Ende der Konsolenanzeige eine Pause hinzuzufügen, um die Ergebnisse aus den vorherigen Schritten leichter anzuzeigen.// Pause Console.ReadLine();Erstellen Sie Ihr Projekt, und führen Sie es aus.
Notiz
Die Ergebnisse werden im Konsolenfenster angezeigt.
Problembehandlung
Wenn Sie den Code testen, wird möglicherweise die folgende Ausnahmefehlermeldung angezeigt:
An unhandled exception of type System.Xml.XmlException occurred in System.xml.dll
Additional information: System error.
Diese Ausnahme tritt in der folgenden Codezeile auf:
docNav = new XPathDocument("c:\\books.xml");
Der Fehler wird durch eine ungültige Verarbeitungsanweisung verursacht. Die Verarbeitungsanweisung kann z. B. zusätzliche Leerzeichen enthalten. Das folgende Beispiel ist eine ungültige Verarbeitungsanweisung:
<?xml version='1.0' ?>
Verwenden Sie eine der folgenden Auflö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.