Compartilhar via


Consultar XML com uma expressão XPath no Visual C#

Este artigo discute como consultar um XPathDocument objeto usando uma expressão XPath (XML Path Language) e a XPathNavigator classe.

O XPath é usado programaticamente para avaliar expressões e selecionar nós específicos em um documento.

Este artigo refere-se ao namespace da Biblioteca de Classes do Microsoft .NET Framework. System.Xml.XPath

Aplica-se a: Visual Studio, .NET Framework

Número original do KB: 308333

Pré-requisitos

Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:

  • Visual C#
  • Terminologia XML
  • Criando e lendo um arquivo XML
  • Sintaxe XPath

Consultar XPathDocument que contém uma expressão XPath

  1. No Microsoft Visual Studio, crie um Aplicativo de Console do Visual C#.

    Observação

    Este exemplo usa um arquivo chamado Books.xml. Você pode criar seu próprio arquivo Books.xml ou usar o exemplo incluído com os inícios rápidos do SDK (Software Development Kit) do .NET.

    Se você não tiver os guias de início rápido instalados e não quiser instalá-los, consulte a seção "Conteúdo relacionado" para o local de download do Books.xml.

    Se você tiver os inícios rápidos instalados, o arquivo Books.xml poderá ser encontrado na Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB pasta. Você pode copiar o arquivo para a \Bin\Debug subpasta da pasta na qual você criou este projeto.

  2. Verifique se o projeto faz referência ao System.Xml namespace.

  3. Use a using instrução nos Xml namespaces and XPath para que você não precise qualificar declarações nesses namespaces posteriormente em seu código. Você pode usar a instrução antes de using qualquer outra declaração, da seguinte maneira:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Declare as variáveis apropriadas. Declare um XPathDocument objeto para conter o documento XML, um XpathNavigator objeto para avaliar expressões XPath e um XPathNodeIterator objeto para iterar por meio de nós selecionados. Declare um String objeto para conter as expressões XPath. Adicione o código de declaração à função Main em Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Carregue um XPathDocument junto ao arquivo de amostra, Books.xml. A XPathDocument classe usa XSLT (Extensible Stylesheet Language Transformations) para fornecer um cache rápido e orientado ao desempenho para processamento de documentos XML. É semelhante ao DOM (Modelo de Objeto de Documento) XML, mas é altamente otimizado para processamento XSLT e modelo de XPath dados.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Crie um XPathNavigator a partir do documento. O XPathNavigator objeto é usado para consultas XPath somente leitura. As consultas XPath podem retornar um valor resultante ou muitos nós.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Crie uma expressão XPath para encontrar o custo médio de um livro. Essa expressão XPath retorna um único valor. Para obter detalhes completos sobre a sintaxe XPath, consulte A sintaxe XPath na seção "Referências".

    // Find the average cost of a book.
    // This expression uses standard XPath syntax.
    strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
    
  8. Use o EvaluateXPathNavigator método do objeto para avaliar a expressão XPath. O Evaluate método retorna os resultados da expressão.

    // Use the Evaluate method to return the evaluated expression.
    Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
    
  9. Crie uma expressão XPath para encontrar todos os livros que custam mais de 10 dólares. Essa expressão XPath retorna apenas nós Title da origem XML.

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. Crie um XPathNodeIterator para os nós selecionados junto com o Select método do XPathNavigator. O XPathNodeIterator representa um conjunto de nós XPath e suporta operações nesse conjunto de nós.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. Para percorrer os nós selecionados, use o XPathNodeIterator que foi retornado do método Select de XPathNavigator. Nesse caso, você pode usar o MoveNext método do XPathNodeIterator para iterar por todos os nós selecionados.

    Console.WriteLine("List of expensive books:");
    //Iterate through the results showing the element value.
    while (NodeIter.MoveNext())
    {
        Console.WriteLine("Book Title: {0}", NodeIter.Current.Value);
    };
    
  12. Use o ReadLine método para adicionar uma pausa no final da exibição do console para exibir mais facilmente os resultados das etapas anteriores.

    // Pause
    Console.ReadLine();
    
  13. Compile e execute seu projeto.

    Observação

    Os resultados são exibidos na janela do console.

Solução de problemas

Ao testar o código, você pode receber a seguinte mensagem de erro de exceção:

An unhandled exception of type System.Xml.XmlException occurred in System.xml.dll  
Additional information: System error.

Essa exceção ocorre na seguinte linha de código:

docNav = new XPathDocument("c:\\books.xml");

O erro é causado por uma instrução de processamento inválida. Por exemplo, a instrução de processamento pode conter espaços desnecessários. O exemplo a seguir é uma instrução de processamento inválida:

<?xml version='1.0' ?>

Para resolver a exceção, use uma das seguintes resoluções:

  • Corrija a instrução de processamento inválida. O exemplo a seguir é uma instrução de processamento válida:

    <?xml version='1.0'?>
    
  • Remova a instrução de processamento XML do arquivo Books.xml.