DOM Tree Walker Tree Model : XML Tree : XML : Java examples (example source code) Organized by topic

Java
1. 2D Graphics GUI
2. 3D
3. Advanced Graphics
4. Ant
5. Apache Common
6. Chart
7. Collections Data Structure
8. Database SQL JDBC
9. Design Pattern
10. Development Class
11. Email
12. Event
13. File Input Output
14. Game
15. Hibernate
16. J2EE
17. J2ME
18. JSP
19. JSTL
20. Language Basics
21. Network Protocol
22. PDF RTF
23. Regular Expressions
24. Security
25. Servlets
26. Spring
27. Swing Components
28. Swing JFC
29. SWT JFace Eclipse
30. Threads
31. Tiny Application
32. Velocity
33. XML
Java Tutorial
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Java » XML » XML TreeScreenshots 
DOM Tree Walker Tree Model

/*
 * Copyright (c) 2000 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 2nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book (recommended),
 * visit http://www.davidflanagan.com/javaexamples2.
 */

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import org.w3c.dom.traversal.DocumentTraversal;
import org.w3c.dom.traversal.NodeFilter;
import org.w3c.dom.traversal.TreeWalker;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import org.apache.xerces.internal.parsers.DOMParser;

/**
 * This class implements the Swing TreeModel interface so that the DOM tree
 * returned by a TreeWalker can be displayed in a JTree component.
 */
public class DOMTreeWalkerTreeModel implements TreeModel {
  TreeWalker walker; // The TreeWalker we're modeling for JTree

  /** Create a TreeModel for the specified TreeWalker */
  public DOMTreeWalkerTreeModel(TreeWalker walker) {
    this.walker = walker;
  }

  /**
   * Create a TreeModel for a TreeWalker that returns all nodes in the
   * specified document
   */
  public DOMTreeWalkerTreeModel(Document document) {
    DocumentTraversal dt = (DocumentTraversaldocument;
    walker = dt
        .createTreeWalker(document, NodeFilter.SHOW_ALL, null, false);
  }

  /**
   * Create a TreeModel for a TreeWalker that returns the specified element
   * and all of its descendant nodes.
   */
  public DOMTreeWalkerTreeModel(Element element) {
    DocumentTraversal dt = (DocumentTraversalelement.getOwnerDocument();
    walker = dt.createTreeWalker(element, NodeFilter.SHOW_ALL, null, false);
  }

  // Return the root of the tree
  public Object getRoot() {
    return walker.getRoot();
  }

  // Is this node a leaf? (Leaf nodes are displayed differently by JTree)
  public boolean isLeaf(Object node) {
    walker.setCurrentNode((Nodenode)// Set current node
    Node child = walker.firstChild()// Ask for a child
    return (child == null)// Does it have any?
  }

  // How many children does this node have?
  public int getChildCount(Object node) {
    walker.setCurrentNode((Nodenode)// Set the current node
    // TreeWalker doesn't count children for us, so we count ourselves
    int numkids = 0;
    Node child = walker.firstChild()// Start with the first child
    while (child != null) { // Loop 'till there are no more
      numkids++; // Update the count
      child = walker.nextSibling()// Get next child
    }
    return numkids; // This is the number of children
  }

  // Return the specified child of a parent node.
  public Object getChild(Object parent, int index) {
    walker.setCurrentNode((Nodeparent)// Set the current node
    // TreeWalker provides sequential access to children, not random
    // access, so we've got to loop through the kids one by one
    Node child = walker.firstChild();
    while (index-- > 0)
      child = walker.nextSibling();
    return child;
  }

  // Return the index of the child node in the parent node
  public int getIndexOfChild(Object parent, Object child) {
    walker.setCurrentNode((Nodeparent)// Set current node
    int index = 0;
    Node c = walker.firstChild()// Start with first child
    while ((c != child&& (c != null)) { // Loop 'till we find a match
      index++;
      c = walker.nextSibling()// Get the next child
    }
    return index; // Return matching position
  }

  // Only required for editable trees; unimplemented here.
  public void valueForPathChanged(TreePath path, Object newvalue) {
  }

  // This TreeModel never fires any events (since it is not editable)
  // so event listener registration methods are left unimplemented
  public void addTreeModelListener(TreeModelListener l) {
  }

  public void removeTreeModelListener(TreeModelListener l) {
  }

  /**
   * This main() method demonstrates the use of this class, the use of the
   * Xerces DOM parser, and the creation of a DOM Level 2 TreeWalker object.
   */
  public static void main(String[] argsthrows IOException, SAXException {
    // Obtain an instance of a Xerces parser to build a DOM tree.
    // Note that we are not using the JAXP API here, so this
    // code uses Apache Xerces APIs that are not standards
    DOMParser parser = new org.apache.xerces.parsers.DOMParser();

    // Get a java.io.Reader for the input XML file and
    // wrap the input file in a SAX input source
    Reader in = new BufferedReader(new FileReader(args[0]));
    InputSource input = new org.xml.sax.InputSource(in);

    // Tell the Xerces parser to parse the input source
    parser.parse(input);

    // Ask the parser to give us our DOM Document. Once we've got the DOM
    // tree, we don't have to use the Apache Xerces APIs any more; from
    // here on, we use the standard DOM APIs
    Document document = parser.getDocument();

    // If we're using a DOM Level 2 implementation, then our Document
    // object ought to implement DocumentTraversal
    DocumentTraversal traversal = (DocumentTraversaldocument;

    // For this demonstration, we create a NodeFilter that filters out
    // Text nodes containing only space; these just clutter up the tree
    NodeFilter filter = new NodeFilter() {
      public short acceptNode(Node n) {
        if (n.getNodeType() == Node.TEXT_NODE) {
          // Use trim() to strip off leading and trailing space.
          // If nothing is left, then reject the node
          if (((Textn).getData().trim().length() == 0)
            return NodeFilter.FILTER_REJECT;
        }
        return NodeFilter.FILTER_ACCEPT;
      }
    };

    // This set of flags says to "show" all node types except comments
    int whatToShow = NodeFilter.SHOW_ALL & ~NodeFilter.SHOW_COMMENT;

    // Create a TreeWalker using the filter and the flags
    TreeWalker walker = traversal.createTreeWalker(document, whatToShow,
        filter, false);

    // Instantiate a TreeModel and a JTree to display it
    JTree tree = new JTree(new DOMTreeWalkerTreeModel(walker));

    // Create a frame and a scrollpane to display the tree, and pop them up
    JFrame frame = new JFrame("DOMTreeWalkerTreeModel Demo");
    frame.getContentPane().add(new JScrollPane(tree));
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    
    frame.setSize(500250);
    frame.setVisible(true);
  }
}

           
       
Related examples in the same category
1. XML Tree: Simple XML utility class
2. A simple XML parser that builds a tree from SAX eventsA simple XML parser that builds a tree from SAX events
3. Demo Tree WalkerDemo Tree Walker
4. XML Tree ViewXML Tree View
5. SAX Tree ViewerSAX Tree Viewer
Home | Contact Us
Copyright 2003 - 07 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.