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

  1. 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.
  2. Stellen Sie sicher, dass das Projekt auf den System.Xml Namespace verweist.

  3. Verwenden Sie die using -Anweisung für die Xml Namespaces und XPath , damit Sie Deklarationen in diesen Namespaces später in Ihrem Code nicht qualifizieren müssen. Sie können die using -Anweisung wie folgt vor allen anderen Deklarationen verwenden:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Deklarieren Sie die entsprechenden Variablen. Deklarieren Sie ein XPathDocument Objekt, das das XML-Dokument enthält, ein XpathNavigator Objekt zum Auswerten von XPath-Ausdrücken und ein XPathNodeIterator Objekt zum Durchlaufen ausgewählter Knoten. Deklarieren Sie ein String -Objekt, das die XPath-Ausdrücke enthält. Fügen Sie den Deklarationscode in der Main -Funktion in Class1hinzu.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Laden Sie eine XPathDocument mit der Beispieldatei Books.xml. Die XPathDocument -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 das XPath Datenmodell optimiert.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Erstellen Sie eine XPathNavigator aus dem Dokument. Das XPathNavigator -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();
    
  7. 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)";
    
  8. Verwenden Sie die Evaluate -Methode des XPathNavigator -Objekts, um den XPath-Ausdruck auszuwerten. Die Evaluate -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));
    
  9. 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]";
    
  10. Erstellen Sie eine XPathNodeIterator für die Knoten, die mit der Select -Methode des XPathNavigatorausgewählt werden. stellt XPathNodeIterator 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);
    
  11. Verwenden Sie die XPathNodeIterator, die von der Select -Methode von XPathNavigatorzurückgegeben wurde, um durch die ausgewählten Knoten zu navigieren. In diesem Fall können Sie die MoveNext -Methode von XPathNodeIterator 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);
    };
    
  12. Verwenden Sie die ReadLine -Methode, um eine Pause am Ende der Konsolenanzeige hinzuzufügen, um die oben genannten Ergebnisse leichter anzuzeigen.

    // Pause
    Console.ReadLine();
    
  13. 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