RSS feeds is everywhere, and rightly so. Just about any modern browser, e-mail client, search engine or mobile phone is compliant with the RSS technology, and it gives web developers an easy and very convenient way to share and consume content across the web. From time to time I need to show a list of recent items form an RSS feed. This is a very easy thing to do, and I always end up copying the same usercontrol around, which becomes nothing but a mess! Eventually I need to change a few things, which means I get different versions of the same control spread throughout my projects.
This mess has got to stop, and from now on I'll put all my common controls in a class library project, which I can reference from all the other projects.
Back to my RSS feed reader - this is the first control I've made into a server control, from one of my many usercontrols around the projects folder. The control downloads the XML at the Url of the RSS feed, and renders a list of links. The controls contains a few properties:
- FeedUrl: The Url of the RSS feed to download
- NumberOfItems: The number of items which should be rendered. Defaults to 5 if none is specified.
- CssClass (Part of the WebControl class, from which FeedList derives): Use this so you have style the control from CSS.
The code
It really is straight forward. Below is the method that renders the links.
private void RenderFeedItems(HtmlTextWriter writer)
{
if (!String.IsNullOrEmpty(FeedUrl))
{
XmlDocument doc = new XmlDocument();
doc.Load(FeedUrl);
XmlNodeList items = doc.DocumentElement.SelectNodes("channel/item");
if (items != null)
{
int bounce = NumberOfItems;
if (items.Count < NumberOfItems)
bounce = items.Count;
for (int i = 0; i < bounce; i++)
{
XmlNode titleNode = items[i].SelectSingleNode("title");
XmlNode urlNode = items[i].SelectSingleNode("link");
XmlNode pubDateNode = items[i].SelectSingleNode("pubDate");
string title = String.Empty;
string url = String.Empty;
DateTime pubDate = new DateTime();
if (titleNode != null)
title = titleNode.InnerText;
if (urlNode != null)
url = urlNode.InnerText;
if (pubDateNode != null)
DateTime.TryParse(pubDateNode.InnerText, out pubDate);
writer.RenderBeginTag(HtmlTextWriterTag.Li);
writer.AddAttribute(HtmlTextWriterAttribute.Href, url);
writer.AddAttribute(HtmlTextWriterAttribute.Title, title);
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write(title);
writer.RenderEndTag();
writer.RenderEndTag();
}
}
else
{
RenderErrorMessage(writer, String.Format("No RSS-feed items found at: {0}", FeedUrl));
}
}
else
{
throw new Exception("FeedUrl cannot be empty!");
}
}
To use the control, put it in your website's App_Code folder, and add the following to the <controls> collection of your <pages> section in web.config:
<add tagPrefix="dnknormark" namespace="dnknormark" />
This should make your <pages> section look like this one:
<pages>
<controls>
<add tagPrefix="dnknormark" namespace="dnknormark" />
</controls>
</pages>
And to put it on an aspx page, and show the latest 5 items from this blog, add this line to the page:
<dnknormark:FeedList ID="lstFeeds" runat="server" CssClass="feedList"
NumberOfItems="5" FeedUrl="http://www.dnknormark.net/syndication.axd" />
Use it as you'd like. Feel free to change it, the way you need.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5