Java - xml biểu diễn cây xml bằng JTree

Thảo luận trong 'Java/Java Script' bắt đầu bởi IME, 21 Tháng một 2011.

  1. Offline

    IME

    • Quy ẩn giang hồ

    Số bài viết:
    219
    Đã được thích:
    196
    Điểm thành tích:
    240
    Code.
    [SPOILER]
    Mã:
    /*
      2mit.org-IME
    */
    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>
    */
    [/SPOILER]
    2mit.org - sharing here

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí