Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um XPathExpression objeto representa uma consulta XPath compilada retornada do método estático Compile da XPathExpression classe ou do Compile método da XPathNavigator classe.
A classe de XPathExpression
Uma consulta XPath compilada representada por um XPathExpression objeto será útil se a mesma consulta XPath estiver sendo usada mais de uma vez.
Por exemplo, ao chamar o Select método várias vezes, em vez de usar uma cadeia de caracteres que representa a consulta XPath a cada vez, use o Compile método da XPathExpression classe ou o Compile método da XPathNavigator classe para compilar e armazenar em cache a consulta XPath em um XPathExpression objeto para reutilizar e melhorar o desempenho.
Depois de compilado, o XPathExpression objeto pode ser usado como entrada para os seguintes métodos de classe XPathNavigator, dependendo do tipo retornado da consulta XPath.
A tabela a seguir descreve cada um dos tipos de retorno do W3C XPath, suas equivalências do Microsoft .NET Framework e com quais métodos o XPathExpression objeto pode ser usado com base em seu tipo de retorno.
| Tipo de retorno XPath W3C | Tipo equivalente do .NET Framework | Descrição | Métodos |
|---|---|---|---|
Node set |
XPathNodeIterator | Uma coleção não ordenada de nós sem duplicatas criadas na ordem de documento. | Select ou Evaluate |
Boolean |
Boolean | Um valor true ou false. |
Evaluate ou Matches |
Number |
Double | Um número de ponto flutuante. | Evaluate |
String |
String | Uma sequência de caracteres de UCS. | Evaluate |
Observação
O Matches método aceita uma expressão XPath como seu parâmetro. O SelectSingleNode método retorna um XPathNavigator objeto, não um dos tipos de retorno do XPath W3C.
A propriedade ReturnType
Depois que uma consulta XPath tiver sido compilada em um XPathExpression objeto, você poderá usar a ReturnType propriedade do XPathExpression objeto para determinar o que a consulta XPath retorna.
A ReturnType propriedade retorna um dos seguintes XPathResultType valores de enumeração que representam os tipos de retorno do XPath W3C.
O exemplo a seguir usa o XPathExpression objeto para retornar um número e um conjunto de nós do books.xml arquivo. A propriedade ReturnType de cada objeto XPathExpression, assim como os resultados dos métodos Evaluate e Select, são gravados no console.
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);
O exemplo usa o books.xml arquivo como entrada.
<?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>
Expressões XPath de desempenho mais alto
Para melhorar o desempenho, use a expressão XPath mais específica possível em suas consultas. Por exemplo, se o nó book for um nó filho do bookstore e o nó bookstore for o elemento no topo de um documento XML, usar a expressão XPath /bookstore/book será mais rápido do que usar //book. A expressão XPath de //book digitalizará cada nó na árvore XML para identificar nós compatíveis.
Além disso, o uso dos métodos de navegação do conjunto de nós fornecidos pela XPathNavigator classe pode resultar em um melhor desempenho em relação aos métodos de seleção fornecidos pela XPathNavigator classe nos casos em que seus critérios de seleção são simples. Por exemplo, se você precisar selecionar o primeiro filho do nó atual, será mais rápido usar o método MoveToFirst do que usar a expressão XPath child::*[1] e o método Select.
Para obter mais informações sobre os métodos de navegação do conjunto de nós da XPathNavigator classe, consulte Node Set Navigation Using XPathNavigator.