C# – Consumir un XML o un RSS alojado en la web de manera sencilla
June 13th, 2010 by JuanK
Muchas veces necesitamos leer contenidos RSS o XML desde la web, y lo necesitamos de manera rápida, ligera y fácil de usar.
Buscando a través de la internet se pueden conseguir varias soluciones de varios sabores diferentes.
En este artículo enseñare a crear un componente capaz de leer cualquier XML que se encuentre en la web con el fin de acceder a su información de manera sencilla y de paso explicaré que hacer cuando ese XML sea un RSS para sacarle mayor provecho.
El problema lo podemos fraccionar en 2 partes
- Obtener el XML o RSS de la web
- Acceder a esa información por medio de un componente conocido, un Dataset
OBTENER EL XML O RSS DE LA WEB
Para lograr este objetivo se hace necesario hacer uso de un objeto HttpWebRequest para crear un Request a la URL donde se encuentra alojado el XML y luego capturar la respuesta (Response).
public static DataSet GetXMLDataSet(string URL)
{
HttpWebRequest xmlRequest = (HttpWebRequest)WebRequest.Create(URL);
WebResponse xmlResponse = xmlRequest.GetResponse();
}
ACCEDER A ESA INFORMACION POR MEDIO DE UN COMPONENTE CONOCIDO, UN DATASET
Aunque ya tenemos el WebResponse este de por si no nos permite un acceso ‘multiuso’ a la información que contiene, pero ya que sabemos que nuestro WebResponse contiene información XML podemos aprovecharnos de eso para crear un Dataset. El Dataset se puede crear a partir de un Stream así que haremos uso del método GetResponseStream para obtenerlo, creamos un DataSet vacio y luego lo llenamos con ReadXml.
public static DataSet GetXMLDataSet2(string URL)
{
HttpWebRequest xmlRequest = (HttpWebRequest)WebRequest.Create(URL);
WebResponse xmlResponse = xmlRequest.GetResponse();
Stream responseStream = xmlResponse.GetResponseStream();
DataSet xmlData = new DataSet();
xmlData.ReadXml(responseStream);
return xmlData;
}
Reduciendo un poco el código queda:
public static DataSet GetXMLDataSet(string URL)
{
HttpWebRequest xmlRequest = (HttpWebRequest)WebRequest.Create(URL);
DataSet xmlData = new DataSet();
xmlData.ReadXml(xmlRequest.GetResponse().GetResponseStream());
return xmlData;
}
Ya estuvo, ahora es tiempo de sacarle provecho al DataSet.
NOTA ADICIONAL
Algunos RSS tienen estructuras un poco más complejas que pueden traer problemas al momento de crear el DataSet, usualmente este problema se manifiesta produciendo una excepción System.Data.DuplicateNameException , para evitar este problema es necesario indicarle al DataSet cual es la estructura correcta del RSS, para ello utilizamos ReadXmlSchema cargando el esquema XSD que describe la estructura de RSS 2.0, para obtenerlo basta con ir a esta página y bajarlo: RSS 2.0 Schema, más específicamente este link rss-2_0.xsd .
Lo adicionamos al proyecto, en mi caso lo he adicionado como recurso incrustado, el código incluyendo esta variante para el caso de RSS sería más o menos de esta forma:
/// <summary>
/// Se conecta a una URL que representa un archivo XML y convierte la información en un DataSet</summary>
/// <param name="URL" />URL del xml publicado en la web</param>
/// <returns>Dataset que representa los datos XML</returns>
public static DataSet GetXMLDataSet(string URL)
{
HttpWebRequest xmlRequest = (HttpWebRequest)WebRequest.Create(URL);
DataSet xmlData = new DataSet();
xmlData.ReadXmlSchema(new XmlTextReader(Resources.rss_2_0, XmlNodeType.Document,null));
xmlData.ReadXml(xmlRequest.GetResponse().GetResponseStream(), XmlReadMode.IgnoreSchema);
return xmlData;
}
- 4 Comentarios »
- Publicado en la categoría 'C#'

Wordpress
4 comentarios to “C# – Consumir un XML o un RSS alojado en la web de manera sencilla ”
June 14th, 2010 at 11:41 pm
[...] C# – Consumir un XML o un RSS alojado en la web de manera sencilla [...]
June 19th, 2010 at 1:14 pm
[...] [...]
November 5th, 2012 at 11:00 pm
Resources.rss_2_0 me podrias indicar que es esto yo supongo que es dentro de Resources hay un rss que se llama rss_2_0 pero de donde lo sacas me podria explicar por favor
November 5th, 2012 at 11:09 pm
Es RSS 2.0 Schema, más específicamente este link http://rss2schema.codeplex.com/ lo baje y lo volvi uno de los recursos de la aplicación, uno puede incluso tenerlo como archivo aparte.