Java tutorial
/* Java, XML, and Web Services Bible Mike Jasnowski ISBN: 0-7645-4847-6 */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.Event.*; import java.io.*; import javax.swing.tree.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import org.apache.xerces.parsers.*; public class XMLTreeView { private SAXTreeBuilder saxTree = null; private static String file = ""; public static void main(String args[]) { JFrame frame = new JFrame("XMLTreeView: [ games.xml ]"); frame.setSize(400, 400); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) { System.exit(0); } }); file = "games.xml"; new XMLTreeView(frame); } public XMLTreeView(JFrame frame) { frame.getContentPane().setLayout(new BorderLayout()); DefaultMutableTreeNode top = new DefaultMutableTreeNode(file); // DefaultMutableTreeNode top = new DefaultMutableTreeNode("XML Document"); saxTree = new SAXTreeBuilder(top); try { SAXParser saxParser = new SAXParser(); saxParser.setContentHandler(saxTree); saxParser.parse(new InputSource(new FileInputStream(file))); } catch (Exception ex) { top.add(new DefaultMutableTreeNode(ex.getMessage())); } JTree tree = new JTree(saxTree.getTree()); JScrollPane scrollPane = new JScrollPane(tree); frame.getContentPane().add("Center", scrollPane); frame.setVisible(true); } } class SAXTreeBuilder extends DefaultHandler { private DefaultMutableTreeNode currentNode = null; private DefaultMutableTreeNode previousNode = null; private DefaultMutableTreeNode rootNode = null; public SAXTreeBuilder(DefaultMutableTreeNode root) { rootNode = root; } public void startDocument() { currentNode = rootNode; } public void endDocument() { } public void characters(char[] data, int start, int end) { String str = new String(data, start, end); if (!str.equals("") && Character.isLetter(str.charAt(0))) currentNode.add(new DefaultMutableTreeNode(str)); } public void startElement(String uri, String qName, String lName, Attributes atts) { previousNode = currentNode; currentNode = new DefaultMutableTreeNode(lName); // Add attributes as child nodes // attachAttributeList(currentNode, atts); previousNode.add(currentNode); } public void endElement(String uri, String qName, String lName) { if (currentNode.getUserObject().equals(lName)) currentNode = (DefaultMutableTreeNode) currentNode.getParent(); } public DefaultMutableTreeNode getTree() { return rootNode; } private void attachAttributeList(DefaultMutableTreeNode node, Attributes atts) { for (int i = 0; i < atts.getLength(); i++) { String name = atts.getLocalName(i); String value = atts.getValue(name); node.add(new DefaultMutableTreeNode(name + " = " + value)); } } } //games.xml /* <?xml version="1.0"?> <games> <game genre="rpg">XML Invaders</game> <game genre="rpg">A Node in the XPath</game> <game genre="rpg">XPath Racers</game> </games> */