Mega Code Archive

 
Categories / Java / XML
 

XML Tree View

/*   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> */