Utility function to help us resolve xml:base values
We have other methods which will traverse the DOM and work out the different xml:base declarations we need to be aware of. We then need to combine them. If a declaration starts with a protocol then we restart the string. If it starts with a / then we add on to the domain name. Otherwise we simply tag it on to the end.
There is no single way of declaring a category in RSS1/1.1 as there is in RSS2 and Atom. Instead the usual approach is to use the dublin core namespace to declare categories. For example delicious use both: <dc:subject>PEAR</dc:subject> and: <taxo:topics><rdf:Bag> <rdf:li resource="http://del.icio.us/tag/PEAR" /></rdf:Bag></taxo:topics> to declare a categorisation of 'PEAR'.
Get content from RSS feeds (atom has its own implementation)
The official way to include full content in an RSS1 entry is to use the content module's element 'encoded', and RSS2 feeds often duplicate that. Often, however, the 'description' element is used instead. We will offer that as a fallback. Atom uses its own approach and overrides this method.
Get an entry by its position in the feed, starting from zero
As well as allowing the items to be iterated over we want to allow users to be able to access a specific entry. This is one of two ways of doing that, the other being by ID.
We need a couple of methods to access XHTML content stored in feeds. This is because we dereference all xml:base references before returning the element. This method handles the attributes.
We need a couple of methods to access XHTML content stored in feeds. This is because we dereference all xml:base references before returning the element. This method recurs through the tree descending from the node and builds our string