Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.XPath
da 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
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.
- 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
Verifique se o projeto faz referência ao
System.Xml
namespace.Use a
using
instrução nosXml
namespaces andXPath
para que você não precise qualificar declarações nesses namespaces posteriormente em seu código. Você pode usar a instrução antes deusing
qualquer outra declaração, da seguinte maneira:using System.Xml; using System.Xml.XPath;
Declare as variáveis apropriadas. Declare um
XPathDocument
objeto para conter o documento XML, umXpathNavigator
objeto para avaliar expressões XPath e umXPathNodeIterator
objeto para iterar por meio de nós selecionados. Declare umString
objeto para conter as expressões XPath. Adicione o código de declaração naMain
função emClass1
.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
Carregue um
XPathDocument
com o arquivo de amostra Books.xml. AXPathDocument
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 deXPath
dados.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
Crie um
XPathNavigator
a partir do documento. OXPathNavigator
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();
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)";
Use o
Evaluate
XPathNavigator
método do objeto para avaliar a expressão XPath. OEvaluate
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));
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]";
Crie um
XPathNodeIterator
para os nós selecionados com oSelect
método doXPathNavigator
. OXPathNodeIterator
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);
Use o
XPathNodeIterator
, que foi retornado doSelect
método deXPathNavigator
, para percorrer os nós selecionados. Nesse caso, você pode usar oMoveNext
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); };
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();
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.