Tools Update: RSSApplet and Xparse-J (1/4) - exploring XML | WebReference

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:

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 NullPointerExceptions 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);

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.

Created: Dec 15, 2000
Revised: Dec 15, 2000