Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

ATOM To RSS Converter

0.00/5 (No votes)
24 Oct 2007 1  
This article will help you to find a way to convert the ATOM to RSS Feed Format

Introduction

Today we know Feeds play a major role in sharing information. RSS makes it possible for people to keep up with their favorite Web sites in an automated manner that's easier than checking them manually.

Along with these, there came many other versions like RDF, ATOM. The code provided here can help in converting the RDF Feeds to the RSS Feed format.

Using the Code

Here the code accepts the ATOM content as the argument and then returns the XML Content which is in the RSS Feed format:

//
public string AtomToRssConverter(XmlDocument atomDoc)
        {
            XmlDocument xmlDoc = atomDoc;
            XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable);
            mgr.AddNamespace("atom", "http://purl.org/atom/ns#");
            const string rssVersion = "2.0";
            const string rssLanguage = "en-US";
            string rssGenerator = "RDFFeedConverter";
            MemoryStream memoryStream = new MemoryStream();
            XmlTextWriter xmlWriter = new XmlTextWriter(memoryStream, null);
            xmlWriter.Formatting = Formatting.Indented;
            string feedTitle = xmlDoc.SelectSingleNode("//atom:title", mgr).InnerText;
            string feedLink = xmlDoc.SelectNodes("//atom:link/@href", mgr)[2].InnerText;
            string rssDescription = xmlDoc.SelectSingleNode
				("//atom:tagline", mgr).InnerText;
            xmlWriter.WriteStartElement("rss");
            xmlWriter.WriteAttributeString("version", rssVersion);
            xmlWriter.WriteStartElement("channel");
            xmlWriter.WriteElementString("title", feedTitle);
            xmlWriter.WriteElementString("link", feedLink);
            xmlWriter.WriteElementString("description", rssDescription);
            xmlWriter.WriteElementString("language", rssLanguage);
            xmlWriter.WriteElementString("generator", rssGenerator);
            XmlNodeList items = xmlDoc.SelectNodes("//atom:entry", mgr);
            if (items == null)
                throw new FormatException("Atom feed is not in expected format. ");
            else
            {
                string title = String.Empty;
                string link = String.Empty;
                string description = String.Empty;
                string author = String.Empty;
                string pubDate = String.Empty;
                for (int i = 0; i < items.Count; i++)
                {
                    XmlNode nodTitle = items[i];
                    title = nodTitle.SelectSingleNode("atom:title", mgr).InnerText;
                    link = items[i].SelectSingleNode("atom:link[@rel='alternate']", 
					mgr).Attributes["href"].InnerText;
                    description = items[i].SelectSingleNode("atom:content", 
							mgr).InnerText;
                    author = items[i].SelectSingleNode("//atom:name", mgr).InnerText;
                    pubDate = items[i].SelectSingleNode("atom:issued", mgr).InnerText;
                    xmlWriter.WriteStartElement("item");
                    xmlWriter.WriteElementString("title", title);
                    xmlWriter.WriteElementString("link", link);
                    xmlWriter.WriteElementString("pubDate", 
			Convert.ToDateTime(pubDate).ToUniversalTime().ToString
			(@"ddd, dd MMM yyyy HH:mm:ss G\MT"));
                    xmlWriter.WriteElementString("author", author);
                    xmlWriter.WriteElementString("description", description);
                    xmlWriter.WriteEndElement();
                }
                xmlWriter.WriteEndElement();
                xmlWriter.Flush();
                xmlWriter.Close();
            }
            XmlDocument retDoc = new XmlDocument();
            string outStr = Encoding.UTF8.GetString(memoryStream.ToArray());
            retDoc.LoadXml(outStr);
            retDoc.Save("c:\\gova.xml");
            memoryStream.Close();
            xmlWriter.Close();
            return outStr;
        }
//

Points of Interest

I have only tried to extract Title, Description, Time, Author, and Link. You can extend that at any point of time. I have even tried to save the converted content. If you wish, you can remove that statement in the code.

History

  • 24th October, 2007: Initial post

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here