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ż
- XmlDocument
- XPathDocument
- XPathNavigator
- Przetwarzanie danych XML przy użyciu modelu danych XPath
- Wybieranie danych XML przy użyciu klasy XPathNavigator
- Obliczanie wyrażeń XPath przy użyciu klasy XPathNavigator
- Dopasowywanie węzłów przy użyciu klasy XPathNavigator
- Typy węzłów rozpoznawanych w zapytaniach XPath
- Zapytania XPath i przestrzenie nazw