ASP.NET 2.0 - Exibindo dados XML e filtrando com XPath
Há alguns dias atrás escrevi um artigo que mostra como gerar e manipular dados XML usando VB .NET. Para exibir dados XML em páginas ASP .NET você pode usar o componente XmlDataSource conforme eu descrevi no artigo ASP .NET - Usando XmlDataSource.
Como estou embalado no XML resolvi expandir o assunto neste artigo usando o Visual Web Developer Express Edition e mostrar como podemos filtrar informações em um arquivo XML usando uma expressão XPath.
Criando um web site
O Visual Web Developer cria a pasta e uma nova página chamado Default.aspx.
Agora vamos criar o arquivo XML que iremos usar como neste exemplo:
Obs: Quando você coloca o arquivo .xml na pasta App_Data, o arquivo .xml tem as permissões corretas para permitir ao ASP.NET ler e gravar o arquivo em em tempo de execução. Além disso, manter arquivos na pasta App_Data protege-os de serem visualizados em um navegador, porque a pasta App_Data está marcada como não-navegável.
Um novo arquivo .xml é criado contendo somente a diretiva XML.(O cabeçalho)
<?
xml version="1.0" standalone="yes"?><
Livros><
livro ISBN="10-000000-001"titulo="The Iliad and The Odyssey"
preco="12.95">
<
comentarios><
avaliacao leitor="4"comentario="Um grande livro." />
<
avaliacao leitor="2"comentario="A traducao poderia estar melhor." />
</
comentarios></
livro><
livro ISBN="10-000000-999"titulo="Anthology of World Literature"
preco="24.95">
<
comentarios><
avaliacao leitor="3" comentario="Precisa de uma atualizacao." /><
avaliacao="4"comentario="Excelente livro." />
</
comentarios></
livro><
livro ISBN="11-000000-002" titulo="Computer Dictionary"preco="24.95" >
<
comentarios><
avaliacao leitor="3"comentario="Um livro muito valioso." />
</
comentarios></
livro><
livro ISBN="11-000000-003"titulo="Cooking on a Budget"
preco="23.95" >
<
comentarios><
avaliacao leitor="4"comentario="Delicioso" />
</
comentarios></
livro><
livro ISBN="11-000000-004"titulo="Great Works of Art" preco="29.95" >
</
livro></
Livros>
Exibindo os dados do arquivo XML em uma página web
O controle XmlDataSource disponibiliza os dados no arquivo XML para controles que estão na página. Os dados estão disponíveis em dois formatos: hierárquico e tabular. Nesse caso, a hierarquia do arquivo Livros.xml se presta bem para uma interpretação relacional. Os dois níveis do arquivo (livros e comentários) podem ser pensados como duas tabelas relacionadas.(Mestre-Detalhes)
Vamos exibir os dados em um controle GridView.
A página exibe o dados XML em uma grade conforme figura abaixo:
Até agora nada de novo. Vamos agora filtrar os dados XML usando uma expressão Xpath.
Obs: Se você não sabe nada sobre Xpath leia o meu artigo : Tutorial XPath
O nosso objetivo será filtrar os dados usando uma estrutura mestre-detalhe onde em um GridView o usuário seleciona um livro e em um segundo GriView ele vê os comentários (se houver) sobre aquele livro.
Para exibir os comentários vou usar uma expressão XPath extraindo essa informação do arquivo XML. A expressão deverá ser dinâmica pois vai depender do livro que o usuário escolher.
Vamos então inserir um segundo controle GridView para exibir os comentários dos livros no arquivo XML.
/Livros/livro/comentarios/avaliacao
Posteriormente, você irá alterar a propriedade XPath dinamicamente no código. Entretanto, definindo uma expressão XPath para a fonte de dados agora, você ajudará as ferramentas do Visual Web Designer a determinar quais informações serão ser exibidas no controle.
O segundo controle GridView aparecerá somente quando o usuário tiver selecionado um livro no primeiro controle GridView.
Agora você pode configurar o primeiro controle GridView para permitir que os usuários selecionem um livro. Você também irá adicionar código que cria uma expressão XPath com base na seleção do usuário e a atribui ao controle XmlDataSource2. O resultado final é que o segundo controle GridView exibirá os comentários do usuário para o catálogo selecionado.
Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
currentIndex = GridView1.SelectedIndex Dim isbn As String isbn = CStr(GridView1.DataKeys(currentIndex).Value)
End Sub |
Vamos testar :
Personalizando a exibição dos comentários
Vamos dar uma incrementada na apresentação do leiaute dos dados exibidos substituindo o controle GridView por um controle DataList e usando o recurso de configurar um TemplateField;
O controle DataList aparece com uma área editável para o modelo de item. O modelo contém um layout padrão que consiste em texto estático e controles Label que são acoplados às colunas Leitor e Comentario no registro de dados. (O controle DataList é capaz de inferir a estrutura dos dados que ele exibirá porque você definiu uma expressão estática XPath para o controle XmlDataSource2 anteriormente nesta explicação passo a passo.)
Protected Sub
GridView1_SelectedIndexChanged(ByVal sender
As Object,
ByVal e As System.EventArgs)
Handles GridView1.SelectedIndexChanged
currentIndex = GridView1.SelectedIndex Dim isbn As String
XmlDataSource2.XPath = String.Format("/Livros/livro[@ISBN='{0}']/comentarios/avaliacao", isbn)
End Sub |
No menu Datalist Tasks, clique em Auto Format e escolha uma formatação a seu critério;
Neste artigo você avançou um pouco mais em seus conhecimentos sobre como tratar arquivos XML em páginas ASP.NET. Aprendeu que pode usar o XPath para efetuar filtros em arquivos XML extraindo informações.
Pegue o projeto completo aqui: xmlNet.zip
Até o próximo artigo ASP.NET ...
Referência: http://msdn2.microsoft.com/en-us/library/13ftcwy9(vs.80,d=printer).aspx
José Carlos Macoratti