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
Eu sei é apenas LINQ to XML, mas eu gosto…




