Converting RSS Reader XML to OPML
By ericblue Categories: Tips XML | 0 comments
A little over a year ago I started using RSSReader to manage
all of my RSS feeds. In that time, I’ve acculated a little over 100 different feeds. Since I
recently switched over to a Mac I started searching for a comparable solution.
One that immediately impressed me was
Vienna for Mac OS X. I needed to figure out
how to export all of my feeds from RSSReader on Windows into Vienna on Mac, so I began by looking at
what the export options were for RSSReader. It turns out that RSSReader does export to XML, however
the format is proprietary. Vienna supports OPML (Outline Processor Markup Langauge) which is a
common standard, so I figured somebody must have come up with the solution to transform. Whipping up
a quick Perl script to do this should have been easy, but after programming all day for a living I
wasn’t really in the mood 😉
I Googled and came across a great example of how to do this with XSLT from
http://pb.meselia.net/it/rssreader-opml. The
program for running the conversion used cscript (via the windows scripting host) and javascript. I
decided to go a slightly different route for processing the XSLT by installing
AquaXSL on my Mac.
I exported my RSSReader subscriptions to export.xml, cut n’ pasted the example XSLT stylesheet and
transformed… Wallah! A new feeds.opml was created. I imported into Vienna and it worked, but none of
my groups were retained. Only a top-level group called Subscriptions was created. After some quick
inspection, I updated the original XSLT to look for the group names and everything imported as
expected. Here is a copy updated XSLT. This can also be downloaded at
https://eric-blue.com/projects/snippets/rssreader_to_opml.xslt.
Credits to the original author from the pollution.kills blog:
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <opml version="1.0"> <head> <title>RssReader Subscriptions</title> <dateCreated /> <ownerName /> </head> <body> <xsl:for-each select="rssreader/feeds/item"> <xsl:element name="outline"> <xsl:attribute name="title" > <xsl:value-of select="group"/> </xsl:attribute> <xsl:element name="outline"> <xsl:attribute name="title" > <xsl:value-of select="title"/> </xsl:attribute> <xsl:attribute name="xmlUrl" > <xsl:value-of select="link" /> </xsl:attribute> </xsl:element> </xsl:element> </xsl:for-each> </body> </opml> </xsl:template> </xsl:stylesheet>