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

  1. 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\VB Ordner. Sie können die Datei in den Ordner kopieren, der \Bin\Debug 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 XPath Und-Namespaces, damit Sie Deklarationen in diesen Namespaces später im 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 für das XML-Dokument, ein XpathNavigator Objekt zum Auswerten von XPath-Ausdrücken und ein XPathNodeIterator Objekt zum Durchlaufen ausgewählter Knoten. Deklarieren Sie ein String Objekt für die XPath-Ausdrücke. Fügen Sie den Deklarationscode in der Main Funktion in Class1 hinzu.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Laden Sie eine XPathDocument mit der Beispieldatei Books.xml. Die XPathDocument Klasse 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 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 können einen resultierenden Wert oder viele Knoten zurückgeben.

    // 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 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]";
    
  10. Erstellen Sie einen XPathNodeIterator für die Knoten, die mit der Methode der ausgewählt Select XPathNavigator sind. Dies XPathNodeIterator stellt 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);
    
  11. Verwenden Sie die XPathNodeIterator , die von der Methode von zurückgegeben Select XPathNavigator wurde, um durch die ausgewählten Knoten zu navigieren. In diesem Fall können Sie die Methode des verwenden, MoveNext um alle ausgewählten Knoten zu XPathNodeIterator 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 besser 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, 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.

References