Udostępnij za pośrednictwem


Skompilowane wyrażenia XPath

Obiekt XPathExpression reprezentuje skompilowane zapytanie XPath zwrócone z metody XPathExpression statycznej Compile klasy lub Compile metody XPathNavigator klasy.

Klasa XPathExpression

Skompilowane zapytanie XPath reprezentowane przez XPathExpression obiekt jest przydatne, jeśli to samo zapytanie XPath jest używane więcej niż raz.

Na przykład podczas wielokrotnego wywoływania Select metody zamiast używać ciągu reprezentującego zapytanie XPath za każdym razem, użyj Compile metody klasy lub Compile metody XPathExpressionXPathNavigator klasy, aby skompilować i buforować zapytanie XPath w XPathExpression obiekcie w celu ponownego użycia i zwiększenia wydajności.

Po skompilowaniu XPathExpression obiekt może być używany jako dane wejściowe do następujących XPathNavigator metod klasy w zależności od typu zwróconego z zapytania XPath.

W poniższej tabeli opisano poszczególne typy zwracane W3C XPath, ich równoważności programu Microsoft .NET Framework i metody XPathExpression , z których może być używany obiekt w oparciu o jego typ zwracany.

Typ zwracany W3C XPath Typ równoważny programu .NET Framework opis Metody
Node set XPathNodeIterator Nieurządkowana kolekcja węzłów bez duplikatów utworzonych w kolejności dokumentu. Select lub Evaluate
Boolean Boolean Wartość true lub false. Evaluate lub

Matches
Number Double Liczba zmiennopozycyjna. Evaluate
String String Sekwencja znaków UCS. Evaluate

Uwaga

Metoda Matches akceptuje wyrażenie XPath jako parametr. Metoda SelectSingleNode zwraca XPathNavigator obiekt, a nie jeden z typów zwracanych W3C XPath.

Właściwość ReturnType

Po skompilowaniu zapytania XPath do XPathExpression obiektu można użyć ReturnType właściwości XPathExpression obiektu, aby określić, co zwraca zapytanie XPath.

Właściwość ReturnType zwraca jedną z następujących XPathResultType wartości wyliczenia reprezentujących zwracane typy W3C XPath.

W poniższym przykładzie XPathExpression użyto obiektu , aby zwrócić liczbę i zestaw węzłów z books.xml pliku. Właściwość ReturnType każdego XPathExpression obiektu, a także wyniki z Evaluate metod i Select są zapisywane w konsoli programu .

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);  

W przykładzie plik jest pobierany books.xml jako dane wejściowe.

<?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>

Wyrażenia XPath o wyższej wydajności

Aby uzyskać lepszą wydajność, użyj najbardziej konkretnego wyrażenia XPath możliwego w zapytaniach. Jeśli na przykład book węzeł jest węzłem bookstore podrzędnym węzła, a bookstore węzeł jest najbardziej głównym elementem w dokumencie XML, użycie wyrażenia /bookstore/book XPath jest szybsze niż użycie polecenia //book. Wyrażenie //book XPath skanuje każdy węzeł w drzewie XML w celu zidentyfikowania pasujących węzłów.

Ponadto użycie metod nawigacji zestawu węzłów dostarczonych przez XPathNavigator klasę może spowodować zwiększenie wydajności metod wyboru dostarczonych przez XPathNavigator klasę w przypadkach, w których kryteria wyboru są proste. Jeśli na przykład musisz wybrać pierwsze podrzędne węzła bieżącego, użycie metody jest szybsze MoveToFirst niż użycie child::*[1] wyrażenia XPath i Select metody .

Aby uzyskać więcej informacji na temat metod nawigacji zestawu węzłów XPathNavigator klasy, zobacz Node Set Navigation Using XPathNavigator (Nawigacja zestawu węzłów przy użyciu klasy XPathNavigator).

Zobacz też