Sdílet prostřednictvím


Kompilierte XPath-Ausdrücke

Aktualisiert: November 2007

Ein XPathExpression-Objekt stellt eine kompilierte XPath-Abfrage dar, die entweder von der statischen Compile-Methode der XPathExpression-Klasse oder der Compile-Methode der XPathNavigator-Klasse zurückgegeben wurde.

Die XPathExpression-Klasse

Eine durch ein XPathExpression-Objekt dargestellte kompilierte XPath-Abfrage ist nützlich, wenn dieselbe XPath-Abfrage mehrmals verwendet wird.

Wenn z. B. die Select-Methode mehrmals ausgerufen wird, verwenden Sie die Compile-Methode der XPathExpression-Klasse oder die Compile-Methode der XPathNavigator-Klasse, um die XPath-Abfrage zu kompilieren und in einem XPathExpression-Objekt zur Wiederverwendung und Leistungssteigerung zwischenzuspeichern, anstatt jedes Mal eine Zeichenfolge zu verwenden, die die XPath-Abfrage darstellt.

Nach der Kompilierung kann das XPathExpression-Objekt je nach dem Typ, der von der XPath-Abfrage zurückgegeben wird, als Eingabe für die folgenden Methoden der XPathNavigator-Klasse verwendet werden:

In der folgenden Tabelle werden alle XPath-Rückgabetypen des W3C sowie ihre Entsprechungen in Microsoft .NET Framework beschrieben. Außerdem wird erläutert, welche Methoden das XPathExpression-Objekt auf der Basis des Rückgabetyps verwenden.

XPath-Rückgabetyp des W3C

Entsprechender .NET Framework-Typ

Beschreibung

Methoden

Node set

XPathNodeIterator

Eine ungeordnete Auflistung von Knoten ohne Duplikate, die in der Reihenfolge der Dokumente erstellt wurde.

Select oder Evaluate

Boolean

Boolean

Ein true-Wert oder ein false-Wert.

Evaluate oder

Matches

Number

Double

Eine Gleitkommazahl.

Evaluate

String

String

Eine Folge von UCS-Zeichen.

Evaluate

Hinweis:

Die Matches-Methode akzeptiert einen XPath-Ausdruck als Parameter. Die SelectSingleNode-Methode gibt ein XPathNavigator-Objekt zurück, nicht einen der XPath-Rückgabetypen des W3C.

Die ReturnType-Eigenschaft

Nachdem eine XPath-Abfrage in ein XPathExpression-Objekt kompiliert wurde, können Sie mithilfe der ReturnType-Eigenschaft des XPathExpression-Objekts bestimmen, was die XPath-Abfrage zurückgibt.

Die ReturnType-Eigenschaft gibt einen der folgenden XPathResultType-Enumerationswerte zurück, die die XPath-Rückgabetypen des W3C darstellen:

Im folgenden Beispiel werden mithilfe des XPathExpression-Objekts eine Zahl und eine Knotengruppe aus der Datei books.xml zurückgegeben. Die ReturnType-Eigenschaft aller XPathExpression-Objekte sowie die Ergebnisse der Evaluate-Methode und der Select-Methode werden in die Konsole geschrieben.

Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

' Returns a number.
Dim query1 As XPathExpression = navigator.Compile("bookstore/book/price/text()*10")
Console.WriteLine(query1.ReturnType)

Dim number As Double = CType(navigator.Evaluate(query1), Double)
Console.WriteLine(number)

' Returns a node set.
Dim query2 As XPathExpression = navigator.Compile("bookstore/book/price")
Console.WriteLine(query2.ReturnType)

Dim nodes As XPathNodeIterator = navigator.Select(query2)
nodes.MoveNext()
Console.WriteLine(nodes.Current.Value)
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
            
// Returns a number.
XPathExpression query1 = navigator.Compile("bookstore/book/price/text()*10");
Console.WriteLine(query1.ReturnType);
            
Double number = (Double)navigator.Evaluate(query1);
Console.WriteLine(number);

// Returns a node set.
XPathExpression query2 = navigator.Compile("bookstore/book/price");
Console.WriteLine(query2.ReturnType);
            
XPathNodeIterator nodes = navigator.Select(query2);
nodes.MoveNext();
Console.WriteLine(nodes.Current.Value);

In diesem Beispiel wird die Datei books.xml als Eingabe verwendet.

<bookstore>
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

Leistungsfähigere XPath-Ausdrücke

Wenn Sie eine bessere Leistung erreichen möchten, verwenden Sie in Ihren Abfragen einen möglichst spezifischen XPath-Ausdruck. Wenn z. B. der book-Knoten ein untergeordneter Knoten des bookstore-Knotens ist, und der bookstore-Knoten ist das oberste Element in einem XML-Dokument, ist die Verwendung des XPath-Ausdrucks /bookstore/book schneller als die Verwendung von //book. Der XPath-Ausdruck //book durchsucht alle Knoten in der XML-Struktur nach übereinstimmenden Knoten.

Darüber hinaus kann die Verwendung der von der XPathNavigator-Klasse bereitgestellten Methoden zur Knotensatznavigation zur Leistungssteigerung der Auswahlmethoden führen, die von der XPathNavigator-Klasse für Fälle mit einfachen Auswahlkriterien bereitgestellt werden. Wenn Sie z. B. den ersten untergeordneten Knoten des aktuellen Knotens auswählen müssen, ist es schneller, die MoveToFirst-Methode zu verwenden, als den XPath-Ausdruck child::*[1] und die Select-Methode zu verwenden.

Weitere Informationen zu den Methoden der Knotensatznavigation der XPathNavigator-Klasse finden Sie unter Navigieren in Knotengruppen mit "XPathNavigator".

Siehe auch

Konzepte

Verarbeiten von XML-Daten mithilfe des XPath-Datenmodells

Auswählen von XML-Daten mit 'XPathNavigator'

Auswerten von XPath-Ausdrücken mit "XPathNavigator"

Vergleich von Knoten mit "XPathNavigator"

In XPath-Abfragen erkannte Knotentypen

XPath-Abfragen und Namespaces

Referenz

XmlDocument

XPathDocument

XPathNavigator