Freigeben über


XML mit einer XPath-Abfrage in Visual C# abfragen

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

  1. 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\VB Ordner. Sie können die Datei in den \Bin\Debug Unterordner des Ordners kopieren, 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 Namespaces und Xml die XPath Namespaces, damit Sie Deklarationen in diesen Namespaces später im Code nicht qualifizieren müssen. Sie können die using Anweisung vor anderen Deklarationen wie folgt 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, das durch ausgewählte Knoten durchlaufen werden soll. Deklarieren Sie ein String Objekt, das die XPath-Ausdrücke enthält. Fügen Sie den Deklarationscode zu der Funktion Main in Class1 hinzu.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Laden Sie eine XPathDocument zusammen 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. Das XML-Dom (Document Object Model) ähnelt dem XML-Dokumentobjektmodell, ist aber für XSLT-Verarbeitung und das XPath Datenmodell hoch optimiert.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Erstellen Sie ein XPathNavigator Dokument 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 ein XPathNodeIterator, das sich auf die Knoten bezieht, die zusammen mit der Select-Methode des XPathNavigator ausgewählt sind. Das XPathNodeIterator stellt 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);
    
  11. Um durch die ausgewählten Knoten zu navigieren, verwenden Sie die XPathNodeIterator, die von der Methode Select von XPathNavigator zurückgegeben wurde. In diesem Fall können Sie die MoveNext Methode der XPathNodeIterator verwenden, 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);
    };
    
  12. Verwenden Sie die ReadLine Methode, um am Ende der Konsolenanzeige eine Pause hinzuzufügen, um die Ergebnisse aus den vorherigen Schritten leichter anzuzeigen.

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