Compartilhar via


Usar o Visual C# para consultar XML com uma expressão XPath

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

Versão original do produto: Visual Studio, .NET Framework
Número original do KB: 308333

Resumo

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

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

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 XML com uma expressão XPath

  1. Crie um novo aplicativo de console do Visual C# no Visual Studio.

    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 nos 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 Referências para obter o local de download Books.xml. Se você tiver os guias de início rápido instalados, o arquivo 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 pasta, que está localizada na 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 na Main função em Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Carregue um XPathDocument com o 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 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 Evaluate XPathNavigator 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 localizar 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 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. Use o XPathNodeIterator, que foi retornado do Select método de XPathNavigator, para percorrer os nós selecionados. Nesse caso, você pode usar o MoveNext XPathNodeIterator método do 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 prontamente os resultados acima.

    // 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:

Ocorreu uma exceção sem tratamento do tipo System.Xml.XmlException em System.xml.dll
Informações adicionais: Erro do sistema.

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

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

O erro de exceção é causado por uma instrução de processamento inválida. Por exemplo, a instrução de processamento pode conter espaços estranhos. 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.

Referências