<< Click to Display Table of Contents >> Linq com XML |
![]() ![]() ![]() |
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>
<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/>";
}
}
}