WPF RSS Reader

RSS stands for "Real Simple Syndication" and is used for publishing updates of frequently updated content. It is a concept that allows syndication of content between two places.

RSS is used in a significantly large amount of industries from banks to publishers, businesses to news, and many more. RSS files are XML based files that contain formatted plain text.The beauty of RSS is that it can be used for any type of content. Simple alerts , podcasts and videocasts are few examples. .

I was looking to build a light version myself and Windows Presentation Foundation (WPF) was the primary candidate for the technology.

Let's dive in.

There is a rich XmlDataProvider class and a lighter but effective SyndicationFeed for you to start with. There are many examples on XMLDataProvider on the web; hence, I wanted to try the SyndicationFeed to create a quick RSS reader. WPF lets you create one with ease within minutes.

The following items would be used in this sample.

The Webclient can be used to download the contents of a specified url. You can even utilize the asynchronous implementation of the downloadstring method provided by this class to avoid freezing your User interface components.

webClientInstance.DownloadStringAsync(new Uri(theURLString));

Once the webclient downloads the data, it returns it as a string. We can use a stringreader to read the result. The result is obtained from the DownloadStringAsync method call of the Webclient instance.

StringReader stringReaderInstance = new StringReader(e.Result);

SyndicationFeed is a .Net inbuilt syndication class that can be used to work with feeds. It has a set of helpful properties that help you read the feed object effectively. Description, Authors, Copyright, Items, Title are few helpful properties. The following code snippet shows you how to read a webclient's response to a syndication feed.

XmlReader reader                = XmlReader.Create(new StringReader(e.Result));
SyndicationFeed downloadFeed    = SyndicationFeed.Load(reader);

Every feed also provides some interesting stuff like Image of the RSS feed provider. This can also be retrieved using the syndication feed. The following code snippet shows you how to do that.

<Image x:Name="feedImage" Grid.Column="0" Stretch="Fill"></Image>
SyndicationFeed downloadFeed = SyndicationFeed.Load(reader);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(imageUrl, UriKind.RelativeOrAbsolute);
bi.EndInit();
feedImage.Source = bi;

The listbox is bound to the Summary, Title, and PublishDate objects of the Syndication Feed Item. Following is the markup of the listbox.

<ListBox Name="listBoxFeedItems" IsSynchronizedWithCurrentItem="True"
        ScrollViewer.CanContentScroll="True">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Expander ExpandDirection="Right">
                                <TextBlock Text="{Binding Path=Summary.Text}" 
                                    TextTrimming="WordEllipsis" />
                            </Expander>
                                    <TextBlock Text="{Binding Path=Title.Text}"
                                    ToolTip="{Binding Path=PublishDate.Date}"/>
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
</ListBox>

Incidentally the more feeds I tried with SyndicationFeed, the more I found a new kind of problem. All feeds do not follow the standard specifications. One such non-standard item is the DateTime fields in the feed item. So you may end up writing your own custom XML Reader that derives and enhances Xml Text Reader.

I found an interesting post at the Microsoft connect, which solves this issue and is the way to go.

I hope you enjoyed the write-up. Thanks for reading!

References:

XMLDataProvider

Syndication feed load fails to Parse datetime



About the Author

Srinath M S

I would love to leave a footprint in this flat world

Related Articles

Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • By now you've likely heard of Agile development and building products in small incremental pieces, so you can get real feedback along the way. In fact, you may even be considering using Agile on your next project. But where do you start? Agile can take a lot of forms, such as Scrum or Kanban. Each form has advantages and disadvantages, but both will help your team get the right feedback they need to build great products. Read this white paper to find out which one is right for you.

  • Cloud computing isn't new, but it's still a hot topic in technology circles. Moving to the cloud has done great things for many businesses. When it comes to handling a basic business necessity, cloud computing has brought many improvements to overall business continuity. Using the cloud for DR makes a lot of sense for many, but it's not exactly the most simple concept. Read this eBook to find answers to all the key questions IT professionals have about cloud-based disaster recovery, and helpful info around the …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date