ASP.NET - Localizando informações em um arquivo XML


Você sabe como localizar informações em um arquivo XML em páginas ASP.NET ? Se ainda não sabe vai aprender e verá como é simples realizar esta tarefa com ASP.NET.

Suponha que você tenha o arquivo classificacao.xml mostrado abaixo. Este arquivo possui os dados os seis primeiros times classificados no campeonato brasileiro de 2004 (até a rodada de 17/10). Abaixo temos uma visão da tabela no formato XLS que exibe a classificação dos times.

<?xml version="1.0" encoding="utf-8" ?>
<Brasileirao>
 <Time>
    <nome>Atletico</nome>
    <classificacao>1</classificacao>
    <pontos>69</pontos>
    <jogos>36</jogos>
    <vitorias>20</vitorias>
    <empates>9</empates>
    <derrotas>7</derrotas>
 </Time>
 <Time>
   <nome>Santos</nome>
   <classificacao>2</classificacao>
   <pontos>68</pontos>
   <Jogos>36</Jogos>
   <vitorias>21</vitorias>
   <empates>5</empates>
   <derrotas>10</derrotas>
 </Time>
 <Time>
   <nome>Sao Paulo</nome>
   <classificacao>3</classificacao>
   <pontos>62</pontos>
   <Jogos>36</Jogos>
   <vitorias>18</vitorias>
   <empates>8</empates>
   <derrotas>10</derrotas>
 </Time>
 <Time>
   <nome>Sao Caetano</nome>
   <classificacao>4</classificacao>
   <pontos>62</pontos>
   <Jogos>36</Jogos>
   <vitorias>18</vitorias>
   <empates>8</empates>
   <derrotas>10</derrotas>
  </Time>
  <Time>
   <nome>Juventude</nome>
   <classificacao>5</classificacao>
   <pontos>59</pontos>
   <Jogos>36</Jogos>
   <vitorias>17</vitorias>
   <empates>8</empates>
   <derrotas>11</derrotas>
   </Time>
 <Time>
   <nome>Palmeiras</nome>
   <classificacao>6</classificacao>
   <pontos>59</pontos>
   <Jogos>36</Jogos>
   <vitorias>16</vitorias>
   <empates>11</empates>
   <derrotas>9</derrotas>
 </Time>
</Brasileirao>

tabela de classificação do campeonato Brasileiro de futebol  edição 2004

Nosso objetivo neste artigo é mostrar como podemos localizar informações no arquivo XML.

Para isto  eu vou criar uma aplicação ASP.NET usando a linguagem VB.NET que irá exibir uma
lista  dropdown com o nome dos times do arquivo XML .

O usuário deverá selecionar um time da lista e clicar no botão - Localiza Dados .

Após isto estaremos realizando uma busca no arquivo XML e exibindo os dados referentes ao :

  • nome do time

  • classificação do time

  • e pontos ganhos

    

 

Nosso projeto constará apenas do arquivo procuraXML.aspx cujo código é mostrado abaixo. A parte amarela refere-se ao código de script na linguagem VB>NET e a parte cinza refere-se ao código HTML e aos controles usados no projeto. Iremos usar os seguintes controles:

Vou utilizar o Web Matrix para criar e testar o projeto ASP.NET. O código do arquivo procuraXML.aspx é o seguinte :

<%@ Page Language="vb" %>
<%@ import Namespace="System.Data" %>
<script runat="server">

Sub Page_Load(Source as Object, E as EventArgs)

if not Page.IsPostBack then

   'define um objeto dataset
   Dim ds as DataSet = new DataSet()

   'le o arquivo XML

   ds.ReadXml(Server.MapPath("/data/classificacao.xml"))

  'atribui o dataset ao controle dropdownlist vinculando o nome do time
   ddlTimes.DataSource=ds
   ddlTimes.DataTextField="nome"
   ddlTimes.DataBind

end if

End Sub

Sub procuraXML(Source as Object, E as EventArgs)

'cria um objeto dataset
Dim dsTimes as DataSet = new DataSet()

'le o arquivo XML
dsTimes.ReadXml(Server.MapPath("/data/classificacao.xml"))

' cria um objeto dataview com base no dataset lido do xml
Dim dv as DataView = new DataView(dsTimes.Tables(0))

'ordena o dataview pelo nome do time
dv.Sort = "nome"

'busca no dataview pelo item selecionado no dropdownlist
Dim rowIndex as integer = dv.Find(ddlTimes.SelectedItem.Text)

Dim Time, Classificacao , Pontos as String

if (rowIndex = -1) Then
   Response.Write("Time nao localizado")
else

  'exibe os dados do time localizado nas labels
  b1.visible="True"
   Time = dv(rowIndex)("nome").ToString()
  lblTime.text = "Time : " + Time + " "

  Classificacao = dv(rowIndex)("classificacao").ToString()
  lblClassificacao.text="Classificação : " + classificacao + " "

  Pontos = dv(rowIndex)("pontos").ToString()
  lblPontos.text="Pontos : " + Pontos

End If
End Sub

</script>
<html>
<head>
<title>Localizando informações em arquivos XML </title>
</head>
<body>
<form id="form1" runat="server">
<p>
<img height="32" src="maco10.gif" width="233" border="0" />
&nbsp;&nbsp;<font face="Verdana" size="2"><strong><font size="3">&nbsp;<font color="#0000a0">
Localizando informações&nbsp;em um arquivo XML</font></font>&nbsp; </strong></font>
</p>
<p>
</p>
<p>
<hr />
</p>
<p align="center">
<font face="Tahoma"><strong>Campeonato Brasileiro - 2004</strong></font>
<p align="center">
<asp:DropDownList id="ddlTimes" Runat="server"></asp:DropDownList>
<asp:Button id="button1" onclick="procuraXML" Runat="server" Text="Localiza Dados"></asp:Button>

</p>
<p>
<br />
</p>
<p align="center">
<asp:placeholder id="b1" Runat="server" Visible="False">
<asp:Label id="lblTime" runat="server"></asp:Label>--
<asp:Label id="lblClassificacao" runat="server"></asp:Label>--
<asp:Label id="lblPontos" runat="server"></asp:Label>

<br />
</asp:placeholder>
</p>
</form>
<hr />
<p align="center">
<font face="Verdana" size="2">Quer saber mais sobre ASP.NET ? - <a href="www.macoratti.net">www.macoratti.net</a></font>
</p>
</body>
</html>

O principal objeto do código acima é o objeto DataView. É ele que eu estou usando para localizar os dados no arquivo XML. Vamos lembrar um pouco das suas características.

A principal finalidade do objeto DataView é efetuar a ligação de dados de uma fonte de dados com a interface do usuário. Ele possibilita alguns recursos como : filtrar , classificar , pesquisar e navegar pelos dados.

Você pode usar o DataView para exibir um subconjunto dos dados de um objeto DataTable. (Podemos ter mais de um DataView ligados ao mesmo DataTable)

O método usado para realizar a busca dos dados é o método Find. Ele procura por uma linha no DataView pelo valor da chave primária definida. Acima a linha de código que faz isto é :

Dim rowIndex as integer = dv.Find(ddlTimes.SelectedItem.Text)

Ao executar o projeto no WebMatrix e selecionando um item da lista suspensa teremos o resultado como exibido na tela abaixo:

Faça o teste on line aqui -> localizando dados em arquivos XML

Simples , rápido e fácil : ASP.NET ...


José Carlos Macoratti