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 //book
van . 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
- XmlDocument
- XPathDocument
- XPathNavigator
- XML-gegevens verwerken met behulp van het XPath-gegevensmodel
- XML-gegevens selecteren met XPathNavigator
- XPath-expressies evalueren met XPathNavigator
- Overeenkomende knooppunten met XPathNavigator
- Knooppunttypen herkend met XPath-query's
- XPath-query's en -naamruimten