/*
   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>
 */
 
            
          
      
sources68 the directory containing the programming examples, source code and programming guide online
Friday, 29 July 2011
XML Tree View
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment