Veremos un pequeño cliente RSS, bajo la forma de aplicación de consola, que utiliza LINQ de .NET para parsear el archivo xml de una forma elegante y concisa.
Primero, definimos las clases Channel e Item, que darán forma a los objetos de un documento RSS:
{
public string Title { get; set; }
public string Link { get; set; }
public string Description { get; set; }
public IEnumerable<Item> Items { get; set; }
}
class Item
{
public string Title { get; set; }
public string Link { get; set; }
public string Description { get; set; }
public string Guid { get; set; }
}
Luego creamos el método que obtiene (utilizando LINQ) el listado de Items de los Channels del feed:
{
return from channels in xdoc.Descendants("channel")
select new Channel
{
Title = channels.Element("title") != null ? channels.Element("title").Value : "",
Link = channels.Element("link") != null ? channels.Element("link").Value : "",
Description = channels.Element("description") != null ? channels.Element("description").Value : "",
Items = from items in channels.Descendants("item")
select new Item
{
Title = items.Element("title") != null ? items.Element("title").Value : "",
Link = items.Element("link") != null ? items.Element("link").Value : "",
Description = items.Element("description") != null ? items.Element("description").Value : "",
Guid = (items.Element("guid") != null ? items.Element("guid").Value : "")
}
};
}
Finalmente, le solicitamos al usuario el path del feed a consultar y presentamos las entradas por consola:
{
Console.WriteLine("Cliente RSS con .NET LINQ");
Console.Write("Ingrese URL de feed RSS:");
String feedUri = Console.In.ReadLine();
var myFeed = getChannelQuery(XDocument.Load(new StreamReader(HttpWebRequest.Create(feedUri).GetResponse().GetResponseStream())));
foreach (var item in myFeed)
{
Console.WriteLine("{0} - {1}", item.Title, item.Description);
foreach (var i in item.Items)
{
Console.WriteLine("{0}", i.Title);
}
}
Console.WriteLine("Presione cualquier tecla para continuar...");
Console.ReadKey();
}
Vía: Coding Day


