Compartilhar via


Expressões XPath compilados

Um objeto de XPathExpression representa uma consulta XPath compilado retornada do método estático de Compile da classe de XPathExpression ou método de Compile da classe de XPathNavigator .

A classe de XPathExpression

Uma consulta XPath compilado é representada por um objeto de XPathExpression é útil se a mesma consulta XPath está sendo usado mais de uma vez.

Por exemplo, quando chamar o método de Select várias vezes, em vez de usar uma cadeia de caracteres que representa a consulta XPath cada vez, usa o método de Compile da classe de XPathExpression ou o método de Compile da classe de XPathNavigator para criar e armazenar em cachê a consulta XPath em um objeto de XPathExpression para reutilização e melhor desempenho.

Uma vez que compilado, o objeto de XPathExpression pode ser usado como entrada para os seguintes métodos da classe XPathNavigator dependendo do tipo retornado de consulta XPath.

A tabela a seguir descreve cada um dos tipos de retorno XPath W3C, suas equivalências do Microsoft.NET Framework, e métodos que o objeto de XPathExpression pode ser usado com base no 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 de true ou de 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 método de Matches aceita uma expressão XPath como seu parâmetro. O método de SelectSingleNode retorna um objeto de XPathNavigator , não um dos tipos de retorno XPath W3C.

A propriedade ReturnType

Depois que uma consulta XPath foi compilada em um objeto de XPathExpression , você pode usar a propriedade de ReturnType do objeto de XPathExpression para determinar o que a consulta XPath retorna.

A propriedade de ReturnType retorna um dos seguintes valores de enumeração XPathResultType que representam os tipos de retorno XPath W3C.

O exemplo a seguir usa o objeto de XPathExpression para retornar um número e um nó definidas do arquivo de books.xml . A propriedade de ReturnType de cada objeto de XPathExpression bem como os resultados dos métodos de Evaluate e de 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 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 desempenho mais alto

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

Para saber mais sobre os métodos de navegação de conjunto de nós da classe XPathNavigator, confira Navegação de conjunto de nós usando XPathNavigator.

Confira também