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 wird.

Die XPathExpression-Klasse

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

Verwenden Sie beispielsweise beim mehrfachen Aufrufen der Select Methode anstelle einer Zeichenfolge, die die XPath-Abfrage jedes Mal darstellt, die Compile Methode der XPathExpression Klasse oder die Compile Methode der XPathNavigator Klasse, um die XPath-Abfrage in einem XPathExpression Objekt zu kompilieren und zwischenzuspeichern, um die Leistung wiederzuverwenden und zu verbessern.

Nach der Kompilierung kann das XPathExpression Objekt je nach typ, der von der XPath-Abfrage zurückgegeben wird, als Eingabe für die folgenden XPathNavigator Klassenmethoden verwendet werden.

In der folgenden Tabelle werden die einzelnen W3C XPath-Rückgabetypen, ihre Microsoft .NET Framework-Äquivalenz und die Methoden beschrieben, mit denen das XPathExpression Objekt basierend auf seinem Rückgabetyp verwendet werden kann.

W3C XPath-Rückgabetyp .NET Framework-Äquivalenttyp BESCHREIBUNG Methodik
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- oder false-Wert. Evaluate oder

Matches
Number Double Eine Gleitkommazahl. Evaluate
String String Eine Abfolge von UCS-Zeichen. Evaluate

Hinweis

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

Die ReturnType-Eigenschaft

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

Die ReturnType Eigenschaft gibt einen der folgenden XPathResultType Enumerationswerte zurück, die die Rückgabetypen von W3C XPath darstellen.

Im folgenden Beispiel wird das XPathExpression Objekt verwendet, um eine Zahl und einen Knoten aus der books.xml Datei zurückzugeben. Die ReturnType Eigenschaft jedes XPathExpression Objekts sowie die Ergebnisse aus den Evaluate Und Select Methoden 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);  

Im Beispiel wird die books.xml Datei 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>

XPath-Ausdrücke mit höherer Leistung

Verwenden Sie für eine bessere Leistung den spezifischsten XPath-Ausdruck, den Sie in Ihren Abfragen verwenden können. Wenn der book Knoten beispielsweise ein untergeordneter Knoten des bookstore Knotens ist und der bookstore Knoten das oberste Element in einem XML-Dokument ist, ist die Verwendung des XPath-Ausdrucks /bookstore/book schneller als die Verwendung //book. Der //book XPath-Ausdruck scannt jeden Knoten in der XML-Struktur, um übereinstimmende Knoten zu identifizieren.

Darüber hinaus kann die Verwendung der von der XPathNavigator Klasse bereitgestellten Knotensatznavigationsmethoden zu einer verbesserten Leistung der auswahlmethoden führen, die von der XPathNavigator Klasse bereitgestellt werden, wenn Ihre Auswahlkriterien einfach sind. Wenn Sie beispielsweise das erste untergeordnete Element des aktuellen Knotens auswählen müssen, ist es schneller, die MoveToFirst Methode zu verwenden, als den child::*[1] XPath-Ausdruck und die Select Methode zu verwenden.

Weitere Informationen zu den Knotensatznavigationsmethoden der XPathNavigator Klasse finden Sie unter Node Set Navigation Using XPathNavigator.

Siehe auch