Partilhar via


Expressões XPath compiladas

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