Tools Update: RSSApplet and Xparse-J (1/4) - exploring XML
Tools Update: RSSApplet and Xparse-J
Webmasters need tools for many technologies, and XML is no exception. The venerable RSSViewerApplet had a few problems and limitations that have been removed in the newly released version 1.2.
First and foremost there is better compatibility with the RSS 0.91 version upgrade from 0.9:
- The top level element in the RSS file can now also be
<rss version="0.91">
instead of<rdf:RDF rdf:xmlns="..." xmlns="...">
- Optional elements are really optional now. A number of bugs were related to omitting optional elements in the RSS file.
- Improved error handling and more useful error messages.
Let's look at the necessary code changes. The previous version
is documented in column11. The
RSSChannel
loading procedure needs to be made
more flexible:
public void load(String srcURL) throws Exception { root = new Xparse().parse(readChannel(srcURL)); Node doc = root.find("RDF", 1); if (doc == null) doc = root.find("rss", 1); if (doc == null) throw new Exception("or missing, is this an RSS file?");
The doc
node represents the top node of the RSS file, which
in RSS 0.9 was identified by <rdf:RDF xmlns="..." rdf:xmlns="...">.
This established RSS as an application of the Resource Description
Framework (RDF), using namespaces to distinguish RDF tags from
RSS elements. RSS 0.91 declared <rss version="0.91">
as the root node, so my code fix now tries to find one or the other,
and gives up with an error message if it could not.
Node n = doc.find("channel/title", 1); if (n == null) throw new Exception("<channel><title> missing."); channelTitle = n.getCharacters(); n = doc.find("channel/link", 1); if (n == null) throw new Exception("<channel><link> missing."); channelLink = new URL(n.getCharacters());The rest has been changed to also give error messages for missing channel titles and links instead of throwing
NullPointerException
s
as in the previous versions.
items = new Vector(); int pos = 0; while (true) { n = doc.find("item/title", pos+1); if (n == null) break; items.insertElementAt(n.getCharacters(), 2*pos); n = doc.find("item/link", pos+1); if (n == null) break; items.insertElementAt(new URL(n.getCharacters()), 2*pos+1); ++pos; } }
All references to RSS elements that are not yet used in this applet have been removed.
More code...
Produced by Michael Claßen
All Rights Reserved. Legal Notices.
URL: https://www.webreference.com/xml/column26/index.html
Created: Dec 15, 2000
Revised: Dec 15, 2000