Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. 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 XPathExpression
Uma consulta XPath compilada representada por um XPathExpression objeto é útil se a mesma consulta XPath estiver sendo usada mais de uma vez.
Por exemplo, ao chamar o método Select várias vezes, em vez de usar uma cadeia de caracteres que representa a consulta XPath a cada vez, use o método Compile da classe XPathExpression ou o método Compile da classe XPathNavigator para compilar e armazenar em cache a consulta XPath em um objeto XPathExpression para reutilização e desempenho aprimorado.
Uma vez compilado, o XPathExpression objeto pode ser usado como entrada para os seguintes XPathNavigator métodos de classe, dependendo do tipo retornado da consulta XPath.
A tabela a seguir descreve cada um dos tipos de retorno XPath do W3C, 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 | Metodologia |
---|---|---|---|
Node set |
XPathNodeIterator | Uma coleção não ordenada de nós sem duplicatas criados na ordem do documento. | Select ou Evaluate |
Boolean |
Boolean | Um valor de true ou de false . |
Evaluate ou Matches |
Number |
Double | Um número em ponto flutuante. | Evaluate |
String |
String | Uma sequência de caracteres 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 XPath do 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 XPath do W3C.
O exemplo a seguir usa o XPathExpression objeto para retornar um número e um conjunto de nós do books.xml
arquivo. As propriedades de cada objeto ReturnType, assim como os resultados dos métodos XPathExpression e Evaluate, 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 arquivo books.xml
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 maior desempenho
Para um melhor 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 nó bookstore
e o nó bookstore
for o elemento superior num documento XML, usar a expressão XPath /bookstore/book
será mais rápido do que usar //book
. A //book
expressão XPath verificará cada nó na árvore XML para identificar nós correspondentes.
Além disso, utilizar os métodos de navegação de conjunto de nós fornecidos pela classe XPathNavigator pode resultar em um desempenho melhor em relação aos métodos de seleção fornecidos pela classe XPathNavigator nos casos em que os critérios de seleção são simples. Por exemplo, se precisar selecionar o primeiro filho do nó atual, é 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 Navegação do conjunto de nós usando XPathNavigator.
Ver também
- XmlDocument
- XPathDocument
- XPathNavigator
- Processar dados XML usando o modelo de dados XPath
- Selecionar dados XML usando XPathNavigator
- Avaliar expressões XPath usando XPathNavigator
- Correspondência de nós usando XPathNavigator
- Tipos de nó reconhecidos através de consultas XPath
- Consultas XPath e namespaces