给一个类似的你看看吧/**
 * Title:TreeTest.java
 * Description : retrieve XML file, generate JavaScript tree
 * Copyright: Copyright(c) 2002
 * Company: Yi Neng
 * @author Ke Deng
 * @version 1.0
 */
package com.jfml.util.Tree;import org.apache.xerces.parsers.SAXParser;
import java.util.List;
import java.util.Vector;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
public class TreeTest
{
  /**
   *XML source path
   */
  private String xmlPath;
  
  public void setXmlPath(String path)
  {
    xmlPath=path;
  }
  
  public String getXmlPath()
  {
    return xmlPath;
  }
  /**
   *XML tree depth
   */
  private int treeDepth=0;
  
  public int getTreeDepth()
  {
    return treeDepth;
  }
  /**
   *Element's grade(层数)
   */
  private int gradeNumber=0;
  
  public int getGradeNumber()
  {
    return gradeNumber;
  }
  /**
   *Save all elements
   */
  private Vector vector=new Vector();  public static void main(String[] args)
  {
    if (args.length!=1)
    {
      System.out.println("Usage: java TreeTest [XML path]");
      System.exit(0);
    }
    
    try
    {
      TreeTest t=new TreeTest();
      t.setXmlPath(args[0]);
      t.go(t.getXmlPath());
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
  
  public void go(String path) throws Exception
  {
    /**
     *XML parser
     */
    SAXBuilder saxBuilder=new SAXBuilder("org.apache.xerces.parsers.SAXParser");
    /**
     *JDOM document
     */
    Document jdomDoc=saxBuilder.build(path);    
    /**
     *Root element
     */
    Element rootElement=jdomDoc.getRootElement();
    
    recurse(rootElement,gradeNumber);
    
    viewVector();
    
    System.out.println("XML tree's depth is "+treeDepth);
  } 
  /**
   *Recursion,get all elements
   */
  public void recurse(Element element,int gradeNumber) throws Exception
  {    
    System.out.println(gradeNumber+" "+element.getName());
    // Save this element 
    vector.add(new TreeElement(gradeNumber,element));
    
    if (treeDepth<gradeNumber)
    {
      treeDepth=gradeNumber;
    }
    
    if (element.hasChildren())
    {
      List list=element.getChildren();
      for (int i=0;i<list.size();i++)
      {
        Element tmp=(Element)list.get(i);
        recurse(tmp,gradeNumber+1);
      }
    }
  }
  /**
   *Show the vector
   */
  public void viewVector() throws Exception
  {
    System.out.println("This XML document has "+vector.size()+" elements.");    for (int i=0;i<vector.size();i++)
    {
      TreeElement tmp=(TreeElement)vector.elementAt(i);
      for (int j=0;j<=treeDepth;j++)
      {
        if (tmp.getKey()==j)
        {
          Element tmp2=(Element)tmp.getObject();
          System.out.println(j+" "+tmp2.getName()+" "+"*****");//tmp2.getText());
        }
      }
    }
  }
}
/**
 *Tree element object
 */
class TreeElement
{
  private int key;
  private Object object;
  
  TreeElement(int i,Object o)
  {
    setKey(i);
    setObject(o);
  }
  
  void setKey(int gradeNumber)
  {
    key=gradeNumber;
  }
  
  int getKey()
  {
    return key;
  }
  
  void setObject(Object obj)
  {
    object=obj;
  }
  
  Object getObject()
  {
    return object;
  }
}