Linq com XML

<< Click to Display Table of Contents >>

Navigation:  ASP.NET > Dicas básicas >

Linq com XML

Previous pageReturn to chapter overviewNext page

Arquivo XML

 

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

<Clientes>

 <Cliente>

   <Nome>Scarlet</Nome>

   <Cidade>Floripa</Cidade>

   <Idade>28</Idade>

 </Cliente>

 

 <Cliente>

   <Nome>Angelina</Nome>

   <Cidade>Criciuma</Cidade>

   <Idade>40</Idade>

 </Cliente>

 

 <Cliente>

   <Nome>Katherine</Nome>

   <Cidade>São Paulo</Cidade>

   <Idade>30</Idade>

 </Cliente>

 

 <Cliente>

   <Nome>Megan</Nome>

   <Cidade>Porto Alegre</Cidade>

   <Idade>50</Idade>

 </Cliente>

 

</Clientes>

 

Default.aspx

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

  <title></title>

</head>

<body>

  <form id="form1" runat="server">

  <div>

   

      <asp:Button ID="btnCarregarXML" runat="server" onclick="btnCarregarXML_Click"

          Text="Carregar XML" />

      <br />

      <br />

      <asp:DropDownList ID="ddlCidade" runat="server">

      </asp:DropDownList>

&nbsp;

      <asp:Button ID="btnFiltrar" runat="server" onclick="btnFiltrar_Click"

          Text="Filtrar" />

      <br />

      <br />

      <asp:Literal ID="Literal1" runat="server"></asp:Literal>

   

  </div>

  </form>

</body>

</html>

 

Default.aspx.cs

 

using System;

using System.Linq;

using System.Web.UI.WebControls;

using System.Xml;

using System.Xml.Linq;

 

public partial class _Default : System.Web.UI.Page

{

  protected void Page_Load(object sender, EventArgs e)

   {

      if (!IsPostBack)

       {

           CarregarCidadesComLinq();

       }

   }

 

  void CarregarCidadesXmlNormal()

   {

      // cria um documento que terá o xml

       XmlDocument doc = new XmlDocument();

 

      // carrega o nosso arquivo xml

       doc.Load(Server.MapPath("~/Dados.xml"));

 

      // carrega todos os nós Cliente dentro de Clientes para um xmlList

       XmlNodeList xmllist = doc.SelectNodes("Clientes/Cliente");

 

      // percorre todos os nós

      foreach (XmlNode node in xmllist)

          // pega só os dados de 1 nó específico: Cidade

           ddlCidade.Items.Add(new ListItem(node.SelectSingleNode("Cidade").InnerText));

   }

 

  void CarregarCidadesComLinq()

   {

      // cria um XDocumento (LINQ to XML)

       XDocument xmlDoc = XDocument.Load(Server.MapPath("~/Dados.xml"));

 

      // faz um select neste XDocument

      var clientes = from cliente in xmlDoc.Descendants("Cliente")

                      select new { Cidade = cliente.Element("Cidade").Value };

 

      // percorre todos e joga para combo

      foreach (var cliente in clientes)

           ddlCidade.Items.Add(cliente.Cidade);

   }

 

  protected void btnCarregarXML_Click(object sender, EventArgs e)

   {

      // cria um XDocumento (LINQ to XML)

       XDocument xmlDoc = XDocument.Load(Server.MapPath("~/Dados.xml"));

 

      // faz um select neste XDocument

      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

                      };

 

      // limpa o label que irá receber os clientes

       Literal1.Text = "";

 

      // percorre todos e joga pra tela

      foreach (var cliente in clientes)

       {

           Literal1.Text += "Nome: " + cliente.Nome + "<br/>" +

              "Cidade: " + cliente.Cidade + "<br/>" +

              "Idade: " + cliente.Idade + "<br/>";

       }

   }

 

  protected void btnFiltrar_Click(object sender, EventArgs e)

   {

      // cria um XDocumento (LINQ to XML)

       XDocument xmlDoc = XDocument.Load(Server.MapPath("~/Dados.xml"));

 

      // faz um select neste XDocument, filtrando a cidade

      var clientes = from cliente in xmlDoc.Descendants("Cliente")

                      where cliente.Element("Cidade").Value == ddlCidade.SelectedItem.Text

                      select new

                      {

                          Nome = cliente.Element("Nome").Value,

                          Cidade = cliente.Element("Cidade").Value,

                          Idade = cliente.Element("Idade").Value

                      };

 

      // limpa o label que irá receber os clientes

       Literal1.Text = "";

 

      // joga pra tela os clientes da cidade selecionada

      foreach (var cliente in clientes)

       {

           Literal1.Text += "Nome: " + cliente.Nome + "<br/>" +

              "Cidade: " + cliente.Cidade + "<br/>" +

              "Idade: " + cliente.Idade + "<br/>";

       }

   }

}