private void Page_Load(object sender, System.EventArgs e) { //Declaramos el objeto XML (o escritor de XML) //donde crearemos el documento RSS 2.0 XmlTextWriter Escritor = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8); //******************************************** //Escribimos la cabecera del documento EscribirInicioRSS(Escritor); //************************************ //Añadimos los elementos. Aquí los he añadido 'a pelo', //sin embargo, lo suyo sería hacer un bucle que se repita //tantas veces como elementos queramos añadir y que //dichos elementos se obtengan de un DataSet de Base de Datos AddElementosRSS(Escritor,"Título 1","/index.html","Descripción 1 - Sin CDATA"); AddElementosRSS(Escritor,"Título 2","/articulos/index.html","Descripción 2 - Sin CDATA"); AddElementosRSS(Escritor,"Título 3","/principal.html","Descripción 3 - Con CDATA", true); AddElementosRSS(Escritor,"Título 4","/articulos/tutoriales/css/index.html","Descripción 4 - Con CDATA", true); //*********************************************************** //Cerramos el documento RSS EscribirFinRSS(Escritor); //************************* //Volcamos el contenido en el objeto y lo cerramos Escritor.Flush(); Escritor.Close(); //************************************************ //Especificamos la codificación del //documento y habilitamos la caché Response.ContentEncoding = System.Text.Encoding.UTF8; Response.ContentType = "text/xml"; Response.Cache.SetCacheability(HttpCacheability.Public); //********************************* //Enviamos al cliente la salida del buffer Response.End(); //**************************************** } ///

/// Escribe el principio de un documento RSS a un XmlTextWriter /// /// El XmlTextWriter donde se escribirá /// El XmlTextWriter con la información de cabecera ya escrita public XmlTextWriter EscribirInicioRSS(XmlTextWriter Escritor) { //Abrimos el documento Escritor.WriteStartDocument(); //******************** //Si se desea añadir un comentario al archivo RSS: Escritor.WriteComment("Comentario de prueba"); //************************************************ //El primer elemento a añadir será la declaración del RSS Escritor.WriteStartElement("rss"); Escritor.WriteAttributeString("version","2.0"); Escritor.WriteAttributeString("xmlns:blogChannel","http://backend.userland.com/blogChannelModule"); //******************************************************* //Definimos el elemento 'padre' Escritor.WriteStartElement("channel"); //***************************** //Si queremos añadir algún elemento inicial independiente //de los contenidos, como que web somos, copyright, etc: Escritor.WriteElementString("title","Documento RSS generado dinámicamente en .NET"); Escritor.WriteElementString("link","/articulos/tutoriales/net/index.html"); Escritor.WriteElementString("description","Un método para escribir documentos RSS en .NET con C#"); //******************************************************* //Devolvemos el objeto XML (RSS) con la cabecera ya escrita return Escritor; //********************************************************* } /// /// Añade un elemento al XmlTextWriter pasado /// /// El XmlTextWriter donde se escribirá /// El título del elemento RSS /// La URL del elemento actual /// Descripción del elemento /// El XmlTextWriter con el nuevo elemento escrito en él public XmlTextWriter AddElementosRSS(XmlTextWriter Escritor, string CadenaTitulo, string CadenaLink, string CadenaDescrip) { //Abrímos un nuevo elemento Escritor.WriteStartElement("item"); //************************* //Añadimos los elementos hijos del actual objeto Escritor.WriteElementString("title",CadenaTitulo); Escritor.WriteElementString("link",CadenaLink); Escritor.WriteElementString("description",CadenaDescrip); Escritor.WriteElementString("pubdate", DateTime.Now.ToString("r")); //********************************************** //Cerramos el elemento Escritor.WriteEndElement(); //******************** //Devolvemos el objeto XML (RSS) con el elemento añadido return Escritor; //****************************************************** } /// /// Añade un elemento al XmlTextWriter pasado /// /// El XmlTextWriter donde se escribirá /// El título del elemento RSS /// La URL del elemento actual /// Descripción del elemento /// Escribe la descripción como CDATA /// El XmlTextWriter con el nuevo elemento escrito en él public XmlTextWriter AddElementosRSS(XmlTextWriter Escritor, string CadenaTitulo, string CadenaLink, string CadenaDescrip, bool BoolDescriptCDATA) { //Abrímos un nuevo elemento Escritor.WriteStartElement("item"); //************************* //Añadimos los elementos hijos del actual objeto Escritor.WriteElementString("title",CadenaTitulo); Escritor.WriteElementString("link",CadenaLink); //Si así lo hemos especificado, la //descripción de añadirá como CDATA if (BoolDescriptCDATA == true) { Escritor.WriteStartElement("description"); Escritor.WriteCData(CadenaDescrip); Escritor.WriteEndElement(); } else { Escritor.WriteElementString("description",CadenaDescrip); } //********************************* Escritor.WriteElementString("pubdate", DateTime.Now.ToString("r")); //********************************************** //Cerramos el elemento Escritor.WriteEndElement(); //******************** //Devolvemos el objeto XML (RSS) con el elemento añadido return Escritor; //****************************************************** } /// /// Finalmente, cerramos los elementos del RSS y el documento en sí /// /// El XmlTextWriter donde se escribirá /// El XmlTextWriter con todos los elementos cerrados public XmlTextWriter EscribirFinRSS(XmlTextWriter Escritor) { //Cerramos los elementos abiertos y el documento Escritor.WriteEndElement(); Escritor.WriteEndElement(); Escritor.WriteEndDocument(); //********************************************** //Devolvemos el objeto con todo el documento ya escrito return Escritor; //***************************************************** }