A simple XML parser that builds a tree from SAX events : XML Tree « XML « Java






A simple XML parser that builds a tree from SAX events

A simple XML parser that builds a tree from SAX events
  
/*
Java Swing, 2nd Edition
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole
ISBN: 0-596-00408-7
Publisher: O'Reilly 
*/
// VSX.java
//A simple XML parser that builds a tree from SAX events. 
//

import java.io.File;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class VSX {

  public TreeModel parse(String filename) {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    XMLTreeHandler handler = new XMLTreeHandler();
    try {
      // Parse the input.
      SAXParser saxParser = factory.newSAXParser();
      saxParser.parse(new File(filename), handler);
    } catch (Exception e) {
      System.err.println("File Read Error: " + e);
      e.printStackTrace();
      return new DefaultTreeModel(new DefaultMutableTreeNode("error"));
    }
    return new DefaultTreeModel(handler.getRoot());
  }

  public static class XMLTreeHandler extends DefaultHandler {
    private DefaultMutableTreeNode root, currentNode;

    public DefaultMutableTreeNode getRoot() {
      return root;
    }

    // SAX Parser Handler methods...
    public void startElement(String namespaceURI, String lName,
        String qName, Attributes attrs) throws SAXException {
      String eName = lName; // Element name
      if ("".equals(eName))
        eName = qName;
      Tag t = new Tag(eName, attrs);
      DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(t);
      if (currentNode == null) {
        root = newNode;
      } else {
        // Must not be the root node...
        currentNode.add(newNode);
      }
      currentNode = newNode;
    }

    public void endElement(String namespaceURI, String sName, String qName)
        throws SAXException {
      currentNode = (DefaultMutableTreeNode) currentNode.getParent();
    }

    public void characters(char buf[], int offset, int len)
        throws SAXException {
      String s = new String(buf, offset, len).trim();
      ((Tag) currentNode.getUserObject()).addData(s);
    }
  }

  public static class Tag {
    private String name;

    private String data;

    private Attributes attr;

    public Tag(String n, Attributes a) {
      name = n;
      attr = a;
    }

    public String getName() {
      return name;
    }

    public Attributes getAttributes() {
      return attr;
    }

    public void setData(String d) {
      data = d;
    }

    public String getData() {
      return data;
    }

    public void addData(String d) {
      if (data == null) {
        setData(d);
      } else {
        data += d;
      }
    }

    public String getAttributesAsString() {
      StringBuffer buf = new StringBuffer(256);
      for (int i = 0; i < attr.getLength(); i++) {
        buf.append(attr.getQName(i));
        buf.append("=\"");
        buf.append(attr.getValue(i));
        buf.append("\"");
      }
      return buf.toString();
    }

    public String toString() {
      String a = getAttributesAsString();
      return name + ": " + a + (data == null ? "" : " (" + data + ")");
    }
  }

  public static void main(String args[]) {
    JFrame frame = new JFrame("VSX Test");
    VSX parser = new VSX();
    JTree tree = new JTree(parser.parse("build.xml"));
    frame.getContentPane().add(new JScrollPane(tree));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 400);
    frame.setVisible(true);
  }
}

           
         
    
  








Related examples in the same category

1.XML Tree: Simple XML utility class
2.DOM Tree Walker Tree Model
3.Demo Tree WalkerDemo Tree Walker
4.XML Tree ViewXML Tree View
5.SAX Tree ViewerSAX Tree Viewer
6.Enter every DOM node into a Swing JTree tree. The forward and backward mappings between Nodes to TreeNodes are kept.
7.This program displays an XML document as a tree