27.3.08

Consumindo XML com LINQ

Aloha!

Mais uma coisa legal de fazer com LINQ: consumir XML! Abaixo um exemplo básico de um arquivo RSS:

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>Teste Nerd RSS</title>
<link>http://www.qx3.com.br</link>
<description>Teste RSS</description>
<ttl>5</ttl>
<item>
<title>NERD S/A</title>
<link>http://nerd-rj.blogspot.com</link>
</item>
<item>
<title>Gusmão</title>
<link>http://www.microsoft.com</link>
</item>
<item status="disabled">
<title>Francke</title>
<link>http://xmasters.com</link>
</item>
</channel>
</rss>



Para começar a brincadeira, vamos criar um repeater no aspx da seguinte forma:


<asp:Repeater ID="rptRSS" runat="server">
<HeaderTemplate>
RSS Ativos:<br /><br />
</HeaderTemplate>
<ItemTemplate>
<asp:Label
Text='<%# Eval("Nome") %>'
runat="server" /> -
<asp:HyperLink
Text='<%# Eval("Url") %>'
NavigateUrl='<%# Eval("Url") %>'
runat="server" />
<hr style="width:75%;text-align:left" />
</ItemTemplate>
</asp:Repeater>



Agora, apenas para efeitos de teste, vamos colocar nosso código no Page_Load do cs mesmo:


public partial class ReadFeedRSS : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
XDocument feedXML = XDocument.Load(@"C:\FeedRSS.xml");

var feeds = from feed in feedXML.Descendants("item")
where feed.Attribute("status") == null ||
feed.Attribute("status").Value != "disabled"
select new {
Nome = feed.Element("title").Value,
Url = feed.Element("link").Value
};

rptRSS.DataSource = feeds;
rptRSS.DataBind();
}
}



Se tudo correr bem, vc verá algo simples... Mas com imaginação e criatividade, pode-se tirar uma aplicação muito legal com esse recurso.

flws!

Nenhum comentário: