Zkompilované výrazy XPath
Objekt XPathExpression představuje kompilovaný dotaz XPath vrácený statickou Compile metodou XPathExpression třídy nebo Compile metodou XPathNavigator třídy.
XPathExpression – třída
Zkompilovaný dotaz XPath reprezentovaný objektem XPathExpression je užitečný, pokud se stejný dotaz XPath používá více než jednou.
Například při opakovaném volání Select metody namísto použití řetězce představujícího dotaz XPath pokaždé použijte Compile metodu XPathExpression třídy nebo Compile metody XPathNavigator třídy ke kompilaci a ukládání dotazu XPath do mezipaměti objektu XPathExpression pro opakované použití a zlepšení výkonu.
Po kompilaci XPathExpression lze objekt použít jako vstup pro následující XPathNavigator metody třídy v závislosti na typu vráceného z dotazu XPath.
Následující tabulka popisuje jednotlivé návratové typy W3C XPath, jejich ekvivalence rozhraní Microsoft .NET Framework a jaké metody XPathExpression lze objekt použít na základě jeho návratového typu.
Návratový typ W3C XPath | Ekvivalentní typ rozhraní .NET Framework | Popis | Metody |
---|---|---|---|
Node set |
XPathNodeIterator | Neuspořádaná kolekce uzlů bez duplicit vytvořených v pořadí dokumentů. | Select nebo Evaluate |
Boolean |
Boolean | Hodnota true nebo false . |
Evaluate nebo Matches |
Number |
Double | Číslo s plovoucí desetinnou čárkou. | Evaluate |
String |
String | Posloupnost znaků UCS. | Evaluate |
Poznámka:
Metoda Matches přijímá výraz XPath jako jeho parametr. Metoda SelectSingleNode vrátí XPathNavigator objekt, nikoli jeden z návratových typů W3C XPath.
ReturnType – vlastnost
Jakmile se dotaz XPath zkompiluje do objektu XPathExpression , můžete pomocí ReturnType vlastnosti objektu XPathExpression určit, co dotaz XPath vrátí.
Vlastnost ReturnType vrátí jednu z následujících XPathResultType hodnot výčtu představující návratové typy W3C XPath.
Následující příklad používá XPathExpression objekt k vrácení čísla a sady uzlů ze books.xml
souboru. Vlastnost ReturnType každého XPathExpression objektu a také výsledky z metod Evaluate a Select jsou zapsány do konzoly.
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);
Příklad vezme books.xml
soubor jako vstup.
<?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>
Výrazy XPath s vyšším výkonem
Pokud chcete dosáhnout lepšího výkonu, použijte ve svých dotazech nejvýkonnější výraz XPath. Pokud je například book
uzel podřízeným uzlem bookstore
uzlu a bookstore
uzel je nejvýraznější prvek v dokumentu XML, použití výrazu /bookstore/book
XPath je rychlejší než použití //book
. Výraz //book
XPath prohledá každý uzel ve stromu XML a identifikuje odpovídající uzly.
Použití navigačních metod sady uzlů poskytovaných XPathNavigator třídou může navíc vést ke zlepšení výkonu XPathNavigator u metod výběru poskytovaných třídou v případech, kdy jsou vaše kritéria výběru jednoduchá. Pokud například potřebujete vybrat první podřízenou položku aktuálního uzlu, je rychlejší použít MoveToFirst metodu než použít child::*[1]
výraz XPath a metodu Select .
Další informace o uzlu nastavit navigační metody XPathNavigator třídy, viz Node Set Navigation Using XPathNavigator.