Delen via


Gecompileerde XPath-expressies

Een XPathExpression object vertegenwoordigt een gecompileerde XPath-query die wordt geretourneerd door de statische Compile methode van de XPathExpression klasse of de Compile methode van de XPathNavigator klasse.

De klasse XPathExpression

Een gecompileerde XPath-query die wordt vertegenwoordigd door een XPathExpression object is handig als dezelfde XPath-query meerdere keren wordt gebruikt.

Als u bijvoorbeeld de Select methode meerdere keren aanroept, in plaats van telkens een tekenreeks te gebruiken die de XPath-query vertegenwoordigt, gebruikt u de Compile methode van de XPathExpression klasse of de Compile methode van de XPathNavigator klasse om de XPath-query in een XPathExpression object te compileren en op te cachen voor hergebruik en verbeterde prestaties.

Zodra het object is gecompileerd, kan het XPathExpression worden gebruikt als invoer voor de volgende XPathNavigator klassemethoden, afhankelijk van het type dat wordt geretourneerd door de XPath-query.

In de volgende tabel worden alle retourtypen W3C XPath, de bijbehorende Microsoft .NET Framework-equivalenten beschreven en met welke methoden het object kan worden gebruikt op basis van het XPathExpression retourtype.

W3C XPath-retourtype Equivalent type .NET Framework Beschrijving Methoden
Node set XPathNodeIterator Een niet-geordende verzameling knooppunten zonder duplicaten die zijn gemaakt in documentvolgorde. Select of Evaluate
Boolean Boolean Een waarde true of false. Evaluate of

Matches
Number Double Een getal met drijvende komma. Evaluate
String String Een reeks UCS-tekens. Evaluate

Notitie

De Matches methode accepteert een XPath-expressie als parameter. De SelectSingleNode methode retourneert een XPathNavigator object, niet een van de W3C XPath-retourtypen.

De eigenschap ReturnType

Nadat een XPath-query is gecompileerd in een XPathExpression object, kunt u de ReturnType eigenschap van het XPathExpression object gebruiken om te bepalen wat de XPath-query retourneert.

De ReturnType eigenschap retourneert een van de volgende XPathResultType opsommingswaarden die de W3C XPath-retourtypen vertegenwoordigen.

In het volgende voorbeeld wordt het XPathExpression object gebruikt om een getal en een knooppuntset uit het books.xml bestand te retourneren. De ReturnType eigenschap van elk XPathExpression object en de resultaten van de Evaluate en Select methoden worden naar de console geschreven.

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 het voorbeeld wordt het books.xml bestand als invoer gebruikt.

<?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-expressies met hogere prestaties

Gebruik voor betere prestaties de meest specifieke XPath-expressie die mogelijk is in uw query's. Als het book knooppunt bijvoorbeeld een onderliggend knooppunt van het bookstore knooppunt is en het bookstore knooppunt het bovenste element in een XML-document is, is het gebruik van de XPath-expressie /bookstore/book sneller dan het gebruik //bookvan . De //book XPath-expressie scant elk knooppunt in de XML-structuur om overeenkomende knooppunten te identificeren.

Bovendien kan het gebruik van de door de XPathNavigator klasse geleverde navigatiemethoden voor knooppuntensets leiden tot verbeterde prestaties ten opzichte van de selectiemethoden die door de XPathNavigator klasse worden geleverd in gevallen waarin uw selectiecriteria eenvoudig zijn. Als u bijvoorbeeld het eerste onderliggende element van het huidige knooppunt moet selecteren, is het sneller om de MoveToFirst methode te gebruiken dan de child::*[1] XPath-expressie en de Select methode te gebruiken.

Zie Node Set Navigation Using XPathNavigator voor meer informatie over de navigatiemethoden van de knooppuntset van de XPathNavigator klasse.

Zie ook