Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Objekt XPathExpression představuje kompilovaný dotaz XPath vrácený statickou Compile metodou XPathExpression třídy nebo Compile metodou XPathNavigator třídy.
Třída XPathExpression
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 ekvivalenty v rozhraní Microsoft .NET Framework a s jakými metodami lze objekt XPathExpression použít podle 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í, v jakém se objevují v dokumentu. | Select nebo Evaluate |
Boolean |
Boolean | Hodnota true nebo false . |
Evaluate nebo Matches |
Number |
Double | Číslo s plovoucí řádovou čá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 přebírá 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 uzel book
podřízeným uzlem uzlu bookstore
a uzel bookstore
je nejvyšším prvkem XML dokumentu, je použití výrazu XPath /bookstore/book
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 třídou XPathNavigator může navíc vést ke zlepšení výkonu oproti metodám výběru poskytovaným třídou XPathNavigator v případech, kdy jsou kritéria výběru jednoduchá. Pokud například potřebujete vybrat prvního potomka aktuálního uzlu, je rychlejší použít metodu MoveToFirst než použít výraz XPath child::*[1]
a metodu Select.
Další informace o metodách navigace sady uzlů třídy XPathNavigator naleznete v části Node Set Navigation Using XPathNavigator.