Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett XPathExpression objekt representerar en kompilerad XPath-fråga som returneras från antingen klassens Compile statiska XPathExpression metod eller Compile -metoden för XPathNavigator klassen.
XPathExpression-klassen
En kompilerad XPath-fråga som representeras av ett XPathExpression objekt är användbar om samma XPath-fråga används mer än en gång.
När du till exempel anropar Select metoden flera gånger, i stället för att använda en sträng som representerar XPath-frågan varje gång, använder du Compile metoden XPathExpression för klassen eller Compile -metoden XPathNavigator för klassen för att kompilera och cachelagrar XPath-frågan i ett XPathExpression objekt för återanvändning och bättre prestanda.
När objektet har kompilerats kan det XPathExpression användas som indata till följande XPathNavigator klassmetoder beroende på vilken typ som returneras från XPath-frågan.
I följande tabell beskrivs var och en av W3C XPath-returtyperna, deras Microsoft .NET Framework-ekvivalenter och vilka metoder XPathExpression objektet kan användas med baserat på dess returtyp.
W3C XPath-returtyp | Motsvarande .NET Framework-typ | Beskrivning | Metoder |
---|---|---|---|
Node set |
XPathNodeIterator | En samling av noder utan dubbletter som inte är i någon specifik ordning och skapats i dokumentordning. | Select eller Evaluate |
Boolean |
Boolean | Ett true eller false -värde. |
Evaluate eller Matches |
Number |
Double | Ett flyttalsnummer. | Evaluate |
String |
String | En sekvens med UCS-tecken. | Evaluate |
Anmärkning
Metoden Matches accepterar ett XPath-uttryck som parameter. Metoden SelectSingleNode returnerar ett XPathNavigator objekt, inte en av W3C XPath-returtyperna.
Egenskapen ReturnType
När en XPath-fråga har kompilerats till ett XPathExpression objekt kan du använda ReturnType -egenskapen XPathExpression för objektet för att avgöra vad XPath-frågan returnerar.
Egenskapen ReturnType returnerar något av följande XPathResultType uppräkningsvärden som representerar W3C XPath-returtyperna.
I följande exempel används objektet XPathExpression för att returnera ett tal och en noduppsättning från books.xml
filen. Egenskapen ReturnType för varje XPathExpression objekt samt resultatet från Evaluate metoderna och Select skrivs till konsolen.
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);
Exemplet tar books.xml
-filen som indata.
<?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-uttryck med högre prestanda
För bättre prestanda använder du det mest specifika XPath-uttryck som är möjligt i dina frågor. Om book
-noden till exempel är en underordnad nod till bookstore
-noden och bookstore
-noden är det översta elementet i ett XML-dokument, går det snabbare att använda XPath-uttrycket /bookstore/book
än //book
.
//book
XPath-uttrycket söker igenom varje nod i XML-trädet för att identifiera matchande noder.
Dessutom kan användning av noduppsättningens navigeringsmetoder som tillhandahålls av XPathNavigator klassen resultera i bättre prestanda jämfört med de urvalsmetoder som tillhandahålls av XPathNavigator klassen i de fall där urvalskriterierna är enkla. Om du till exempel behöver välja den första barnnoden av den nuvarande noden är det snabbare att använda MoveToFirst metoden än att använda child::*[1]
XPath-uttrycket och Select metoden.
Mer information om noduppsättningens navigeringsmetoder för XPathNavigator klassen finns i Noduppsättningsnavigering med XPathNavigator.