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 Select método várias vezes, em vez de usar uma cadeia de caracteres que representa a consulta XPath cada vez, use o XPathExpressionCompile método da classe ou o Compile método da classe para compilar e armazenar em XPathNavigator cache a consulta XPath em um XPathExpression objeto 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 Description Métodos
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 de vírgula flutuante. Evaluate
String String Uma sequência de caracteres UCS. Evaluate

Nota

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. A ReturnType propriedade de cada XPathExpression objeto, Evaluate bem como os resultados dos métodos 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 maior desempenho

Para um melhor desempenho, use a expressão XPath mais específica possível em suas consultas. Por exemplo, se o book nó for um nó filho do bookstore nó e o bookstore nó for o elemento mais alto em um documento XML, usar a expressão /bookstore/book XPath 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, o uso dos métodos de navegação do conjunto de nós fornecidos pela XPathNavigator classe pode resultar em melhor desempenho em relação aos métodos de seleção fornecidos pela classe nos casos em que os XPathNavigator critérios de seleção são simples. Por exemplo, se você precisar selecionar o primeiro filho do nó atual, é mais rápido usar o MoveToFirst método do que usar a child::*[1] expressão XPath e o Select método.

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.

Consulte também