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;
//*****************************************************
}