import org.xml.sax.SAXException; import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; public class JTreeHandler extends DefaultHandler{ private DefaultTreeModel treeModel; private DefaultMutableTreeNode node = null; private JTree jtree; JTreeHandler(JTree jtree){ this.jtree=jtree; } public void startElement(String uri, String localName, String raw, Attributes attrs) throws SAXException { super.startElement(uri,localName,raw,attrs); if(node==null) //initialise node and model jtree.setModel( new DefaultTreeModel( node=new DefaultMutableTreeNode(localName))); else // add child and set node to the child node.add(node=new DefaultMutableTreeNode(localName)); // add attributes as children for (int i = 0; i < attrs.getLength(); i++) node.add(new DefaultMutableTreeNode( '@'+attrs.getLocalName(i)+"["+attrs.getValue(i)+']')); } public void endElement(String uri, String localName, String raw) throws SAXException { super.endElement(uri,localName,raw); node = (DefaultMutableTreeNode) node.getParent(); } public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch,start,length); String text = new String(ch,start,length).trim(); if(text.length()>0) node.add(new DefaultMutableTreeNode(text)); } }