Freigeben über


Kompilierte XPath-Ausdrücke

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.

<?xml version="1.0" encoding="utf-8" ?> 
<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