ASP .NET – Filtrando e exibindo dados XML com LINQ

O LINQ to XML é um provedor de dados LINQ que é implementado no namespace System.Xml.LINQ a partir da versão 3.5 da plataforma .NET. Ele fornece um modelo de programação que permite ler, construir e escrever dados XML.

Você pode usar LINQ To XML para realizar consultas LINQ sobre dados no formato XML que podem ser retornados do arquivo de sistemas, de uma URL HTTP remota, de um web service ou partir de qualquer XML em memória existente.

O objetivo será acessar uma fonte de dados XML exibindo o seu conteúdo em uma página ASP .NET e filtrar informações com base em um critério usando LINQ to XML.

Abaixo temos a tela de apresentação inicial da aplicação e ao lado o filtro aplicado usando como critério a cidade selecionada no controle dropdownlist.

Eu vou usar o Visual Web Developer 2008 Express Edition (VWD 2008) no exemplo deste artigo.

Vamos abrir o VWD 2008 e no menu File selecionar New Web Site selecionando o template ASP .NET Web Site, a linguagem C# , informar o nome LINQ_xml e clicar no botão OK;

Com o web site criado, vamos definir uma fonte de dados XML no projeto. Primeiro, devemos criar a pasta App_Data clicando com o botão direito do mouse sobre o nome do projeto e selecionando add ASP .NET Folder -> App_Data;

A seguir, clique com o botão direito sobre a pasta App_Data e selecione Add New Item;

A seguir, selecione o template XML File, informe o nome Clientes.xml e clique no botão Add;

A seguir, no editor XML que será aberto, defina a estrutura do arquivo XML conforme abaixo:

<?xml version="1.0" encoding="utf-8" ?>

<Clientes>

 <Cliente>
    <Nome>Macoratti</Nome>
    <Cidade>Brasilia</Cidade>
    <Idade>37</Idade>
 </Cliente>

 <Cliente>
    <Nome>Jessica</Nome>
    <Cidade>Santos</Cidade>
    <Idade>19</Idade>
 </Cliente>

 <Cliente>
    <Nome>Jefferson</Nome>
    <Cidade>Marilia</Cidade>
    <Idade>17</Idade>
 </Cliente>

 <Cliente>
    <Nome>Janice</Nome>
    <Cidade>Campinas</Cidade>
    <Idade>13</Idade>
 </Cliente>

</Clientes>

Agora, vamos criar a interface com o usuário usando o formulário Default.aspx.

Selecione a página Default.aspx e, no modo de Design a partir do menu Table -> Insert Table, inclua uma tabela com quatro linhas e duas colunas e inclua os seguintes componentes :

  • Button : ID =butGetXML
  • Button : ID = butFiltraXML
  • DropDownList : ID = ddlCidade
  • Literal : ID = litXMLDados

O leiaute do formulário web pode ser visto abaixo:

Vamos definir o código no arquivo Default.aspx.cs (code-behind).

A primeira coisa a fazer é declarar os namespaces para acessar os recursos do XML e do LINQ:

using System.Xml.Linq;
using System.Xml;

No evento Load da página vamos verificar se ocorre um postback e chamar a rotina carregaDLL para preencher o controle dropdownlist;

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            carregaDLL();
    }

O código da rotina carregaDLL() é dado a seguir. Estamos instanciando um XmlDocument e usando o seu método Load para carregar o arquivo XML;

protected void carregaDLL()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(Server.MapPath("App_Data/Clientes.xml"));
        XmlNodeList nodeList = doc.SelectNodes("Clientes/Cliente");

        foreach (XmlNode node in nodeList)
            ddlCidade.Items.Add(new ListItem(node.SelectSingleNode("Cidade").InnerText));
    }

Agora no evento Click do botão Filtrar XML temos o seguinte código:

 protected void butFiltraXML_Click(object sender, EventArgs e)
    {
    XDocument xmlDoc = XDocument.Load(Server.MapPath("App_Data/Clientes.xml"));

  var clientes = from cliente in xmlDoc.Descendants("Cliente")
                              where cliente.Element("Cidade").Value == ddlCidade.SelectedItem.ToString()
                             select new
                             {
                                Nome = cliente.Element("Nome").Value,
                                Cidade = cliente.Element("Cidade").Value,
                                Idade = cliente.Element("Idade").Value,
                             };

        litXMLDados.Text = "";
foreach (var cliente in clientes)
        {
            litXMLDados.Text = litXMLDados.Text + "Nome  : " + cliente.Nome + "<br />";
            litXMLDados.Text = litXMLDados.Text + "Cidade: " + cliente.Cidade + "<br />";
            litXMLDados.Text = litXMLDados.Text + "Idade : " + cliente.Idade + "<br /><br />";
        }

        if (litXMLDados.Text == "")
            litXMLDados.Text = "Nada encontrado.";
    }

Neste código, estamos usando uma consulta LINQ para filtrar as informações do arquivo Clientes.xml. Observe que estamos usando o item selecionado do controle DropDownList para filtrar as informações por cidade selecionada.

A seguir temos o código do evento Click do botão – Exibir XML – que obtém as informações do arquivo xml e as exibe;

protected void butGetXML_Click(object sender, EventArgs e)
    {
  XDocument xmlDoc = XDocument.Load(Server.MapPath("App_Data/Clientes.xml"));

    var clientes = from cliente in xmlDoc.Descendants("Cliente")
                             select new
                             {
                                   Nome =  cliente.Element("Nome").Value,
                                   Cidade = cliente.Element("Cidade").Value,
                                   Idade = cliente.Element("Idade").Value,
                             };

        litXMLDados.Text = "";
  foreach (var cliente in clientes)
        {
            litXMLDados.Text = litXMLDados.Text + "Nome  : " + cliente.Nome + "<br />";
            litXMLDados.Text = litXMLDados.Text + "Cidade: " + cliente.Cidade + "<br />";
            litXMLDados.Text = litXMLDados.Text + "Idade : " + cliente.Idade + "<br /><br />";
        }

        if (litXMLDados.Text == "")
            litXMLDados.Text = "Nada encontrado.";
    }

Aqui, novamente, usamos uma consulta LINQ para selecionar informações do arquivo Clientes.xml.

Note que o código é bem simples, principalmente usando os recursos do LINQ to XML.

Pegue o projeto completo aqui: LINQ_xml.zip

Fonte: Imasters

You can leave a response, or trackback from your own site.

Leave a Reply

Powered by WordPress | Find Low APR Credit Cards at BestInCreditCards.com | Thanks to iApplyForCreditCards.com, RPG Soundtracks and Transfer of Equity
SEO Powered by Platinum SEO from Techblissonline