Creating an RSS 2.0 feed with .NET

Rather than post another article about setting up and using third party tools with .NET MVC, I thought I would take a slightly different approach this time and write a Programming with .NET article based on something I have had to do whilst creating the previous incantation of Jambr.

I had the requirement to create an RSS feed for both the Articles and News sections of the site so you lovely readers could subscribe to either of them, I haven't actually had to create RSS feeds before so had to do some digging to find the best route to go down. I read numerous programming articles on line and compiled a simple class which enables me to create an RSS2.0 compliant feed, as seen here.

USING THE CODE

Rather than putting all 237 lines of code in here I have uploaded the class for you, you can download it from here. Just pop it into your project and use it like this:

  • Firstly you need to create an instance of the object (apologies if I'm teaching you to suck eggs!):
    Dim rssfeed As New RSSFeed()
  • Next, you need to create the channel. RSS2.0 feeds can only have one channel so you're only able to call this method once
rssfeed.CreateChannel("Jambr - News"
"Http://www.jambr.co.uk/News",
"Jambr News",
Now,
"en-GB")
  • And now, you add your items. Obviously you need to loop through the objects you want in your feed and add them, but we'll add just one example here:
rssfeed.WriteRSSItem("This is an item",
"http://www.yoursite.com",
"Karl",
Now,
"This is the description",
Guid.NewGuid.ToString)
  • Finally, after you've added your items you can return the string of the XML document. I'm coding around .NET MVC 4 so as a result I return the XML document to the user like this: Return Content(rssfeed.ToString, "text/xml")

It is worth noting that I have included additional parameters on both the CreateChannel and WriteRSSItem methods which enables you to add Categories (in the context of Jambr, I Tag all articles to enable them to be categorised) and Content (which will be added to the content:encoded tag).

To add category tags, pass them as an array of KeyValuePair(of String, String) objects.
To add the content, pass it as a string.

rssfeed.WriteRSSItem("This is an item",
"http://www.yoursite.com",
"Karl",
Now,
"This is the description",
Guid.NewGuid.ToString,
"This is the full body of the post",
{New KeyValuePair(Of String, String)("Tag1", "/Articles/?Tag=Tag1")})

A few issues I encountered

There were a few issues I encountered whilst trying to ensure the feed was RSS 2.0 compliant which are sorted in this code, for example:

  1. Date Times needed to be in the correct format (Sat, 07 Sep 2002 9:42:31 GMT), luckily .ToString("r") on a datetime object handles that.
  2. Adding custom namespaces to the root rss element of the document, and then actually enabling me to write tags which reference that namespace. for example <dc:creator> tags

I hope that helps! Any questions, please ask.