Weblogs with DOM
import org.w3c.dom.*;
import org.w3c.dom.traversal.*;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.util.*;
import java.net.*;
public class WeblogsDOM {
public static String DEFAULT_URL
= "http://static.userland.com/weblogMonitor/logs.xml";
public static List listChannels() throws DOMException {
return listChannels(DEFAULT_URL);
}
public static List listChannels(String uri) throws DOMException {
if (uri == null) {
throw new NullPointerException("URL must be non-null");
}
org.apache.xerces.parsers.DOMParser parser
= new org.apache.xerces.parsers.DOMParser();
Vector urls = null;
try {
// Read the entire document into memory
parser.parse(uri);
Document doc = parser.getDocument();
org.apache.xerces.dom.DocumentImpl impl
= (org.apache.xerces.dom.DocumentImpl) doc;
NodeIterator iterator = impl.createNodeIterator(doc,
NodeFilter.SHOW_ALL, new URLFilter(), true);
urls = new Vector(100);
Node current = null;
while ((current = iterator.nextNode()) != null) {
try {
String content = current.getNodeValue();
URL u = new URL(content);
urls.addElement(u);
}
catch (MalformedURLException e) {
// bad input data from one third party; just ignore it
}
}
}
catch (SAXException e) {
System.err.println(e);
}
catch (IOException e) {
System.err.println(e);
}
return urls;
}
static class URLFilter implements NodeFilter {
public short acceptNode(Node n) {
if (n instanceof Text) {
Node parent = n.getParentNode();
if (parent instanceof Element) {
Element e = (Element) parent;
if (e.getTagName().equals("url")) {
return NodeFilter.FILTER_ACCEPT;
}
}
}
return NodeFilter.FILTER_REJECT;
}
}
public static void main(String[] args) {
try {
List urls;
if (args.length > 0) {
try {
URL url = new URL(args[0]);
urls = listChannels(args[0]);
}
catch (MalformedURLException e) {
System.err.println("Usage: java WeblogsJDOM url");
return;
}
}
else {
urls = listChannels();
}
Iterator iterator = urls.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
catch (/* Unexpected */ Exception e) {
e.printStackTrace();
}
} // end main
}