Create a RSS-feed

RSS is getting popular and is a great way to let the users subscribe to the content of your web site. This is how you create an feed in Asp.Net.

//Funktion som skapar RSS flöde
protected void GenerateRss()
{
try
{

//Fysisk sökväg på servern (Byt ut mot den på din server)
string strXMLPath = "C:/ . . . /rss.xml";

FileStream objFileStream = new FileStream(strXMLPath,FileMode.Create);
XmlTextWriter xtw = new XmlTextWriter(objFileStream,System.Text.Encoding.GetEncoding("iso-8859-1"));
xtw.Formatting = Formatting.Indented;
xtw.WriteStartDocument();

//skriv ut <rss version="2.0">
xtw.WriteStartElement("rss");
xtw.WriteAttributeString("version","2.0");

//skriv ut <channel>
xtw.WriteStartElement("channel");

//skriv ut element som tillhör <channel>
xtw.WriteElementString("title","Codeodyssey.se");
xtw.WriteElementString("link","http://www.codeodyssey.se/");
xtw.WriteElementString("description","Code Odyssey - expanderar webben");
xtw.WriteElementString("language","sv-SE");
xtw.WriteElementString("copyright","Copyright (c) 2004-2006 Code Odyssey");

OleDbConnection conn = new OleDbConnection (strConn);
bool boolPermission = false;
OleDbDataReader objDataReader=null;
try
{
string strSQL = "SELECT Blog.Id, Blog.Title, Blog.Body, Blog.PublishDate FROM Blog ORDER BY Blog.PublishDate DESC";

conn.Open();

OleDbCommand objCommand = new OleDbCommand(strSQL, conn);
objDataReader = objCommand.ExecuteReader();
while (objDataReader.Read() == true)
{
int Id = Convert.ToInt32(objDataReader["Id"]);
string Title = Convert.ToString(objDataReader["Title"]);
string Body= Convert.ToString(objDataReader["Body"]);
//Se till att datum följer RFC-822 standard
string PublishDate = Convert.ToString( ((DateTime)objDataReader["PublishDate"]).ToString("r"));


//skriv ut <item> och dess innehåll
xtw.WriteStartElement("item");
xtw.WriteElementString("title",Title);
xtw.WriteElementString("link","http://www." + strUrl.ToLower() + "/Blog.aspx?id=" + Id);
xtw.WriteElementString("guid","http://www." + strUrl.ToLower() + "/Blog.aspx?id=" + Id);
xtw.WriteElementString("description",Body);
xtw.WriteElementString("pubDate",PublishDate);
xtw.WriteEndElement();
}
objCommand.Dispose();
}
catch (Exception objException)
{
Trace.Warn("GenerateRss() Fel!",objException.Message);
}
finally
{
if(objDataReader!=null)
{
objDataReader.Close();  
}
onn.Close();
}

//skriv ut </channel>
xtw.WriteEndElement();

//skriv ut </rss>
xtw.WriteEndElement();

//Stäng xml skrivaren
xtw.Close();
}
catch (Exception objException)
{
Trace.Warn("GenerateRss() Fel!",objException.Message);
}
}

This is how to add the icon in the browser.

<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="xml/rss.xml" />

This is how to add such a link from the code behind:

//Add RSS link HtmlLink link = new HtmlLink();
link.Attributes.Add("type", "application/rss+xml");
link.Attributes.Add("rel", "alternate");
link.Attributes.Add("href", "feed/rss.xml");
this.Page.Header.Controls.Add(link);

Comments

Vad använder du för bibliotek för FileStream? Jag vet inte om jag har förstått artikeln rätt, men jag får "The type or namespace name 'FileStream' could not be found (are you missing a using directive or an assembly reference?)". Har bara ändrat om från OLEDB till SQL i stort sett.
Hej Per. FileStream finns i namespacet System.IO, lägg till det så ska det nog gå bättre.
Hej Per. FileStream finns i namespacet <i>System.IO</i>, lägg till det så ska det nog gå bättre.
Nu gick det bättre. Tack för ett bra exempel. Fick ändra strXMLPath och köra server.MapPath för att servern skulle hitta filen.
Fint att du fick det att fungera till sist. Jag såg att koden innehåll lite onödiga rader där Connections-strängen stängdes ( man behöver inte sätta conn=null och inte heller kolla om conn!=null när man stänger ) Tog bort detta från exemplet. Något som tillägget "Resharper" i Visual studio har hjälpt mig med att komma till insikt med.
Jag kör using(), så slipper jag stänga databasanslutningen över huvud taget. http://pastebin.com/m36b0d419 så ser koden ut när jag gjort om till MS SQL. Jag använder metoden i ett skolprojekt, ifall jag råkat ta bort någon copyrightkod som måste stå kvar. Resharper får jag kika på, för det har jag inte kollat på tidigare.
Ok det ser ju bra ut med databasanslutningen, tack för att du visade kodexemplet. Du behöver inte bry dig om att ha kvar något copyright meddelande. Ser att på rad 57 står "Code Odyssey" kvar i din kod, den kan du byta ut mot ditt eget meddelande om du vill.
Bästa pris på måleriservice
Svar till Helsingborgsmålarna.se: Konstigt ställe att berätta att ni har bästa pris på måleriservice. Det har liksom inte så mycket med resten av artikeln att göra. Var snälla och sluta spamma!

Nice, precis vad jag letade efter: En guide om hur man sätter upp ett RSS-flöde med ASP.NET! Äntligen hittade jag en, tack! :)

Please fill out all the fields.

*
*