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 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
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\VBpasta. Você pode copiar o arquivo para a\Bin\Debugsubpasta da pasta na qual você criou este projeto.Verifique se o projeto faz referência ao
System.Xmlnamespace.Use a
usinginstrução nosXmlnamespaces andXPathpara que você não precise qualificar declarações nesses namespaces posteriormente em seu código. Você pode usar a instrução antes deusingqualquer outra declaração, da seguinte maneira:using System.Xml; using System.Xml.XPath;Declare as variáveis apropriadas. Declare um
XPathDocumentobjeto para conter o documento XML, umXpathNavigatorobjeto para avaliar expressões XPath e umXPathNodeIteratorobjeto para iterar por meio de nós selecionados. Declare umStringobjeto para conter as expressões XPath. Adicione o código de declaração à funçãoMainemClass1.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;Carregue um
XPathDocumentjunto ao arquivo de amostra, Books.xml. AXPathDocumentclasse 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 deXPathdados.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Crie um
XPathNavigatora partir do documento. OXPathNavigatorobjeto é 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 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)";Use o
EvaluateXPathNavigatormétodo do objeto para avaliar a expressão XPath. OEvaluatemé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 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]";Crie um
XPathNodeIteratorpara os nós selecionados junto com oSelectmétodo doXPathNavigator. OXPathNodeIteratorrepresenta 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);Para percorrer os nós selecionados, use o
XPathNodeIteratorque foi retornado do métodoSelectdeXPathNavigator. Nesse caso, você pode usar oMoveNextmétodo doXPathNodeIteratorpara 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
ReadLinemétodo para adicionar uma pausa no final da exibição do console para exibir mais facilmente os resultados das etapas anteriores.// 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:
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.