[jdom-interest] JDOM and JTree

Xuemin Guan xuemin at appresso.com
Mon Nov 25 03:57:52 PST 2002

See the attachment, an example from "Java & XML". I used it for a demo
purpose. It merely displays a XML document in a form of a visible tree.
But should get you started.


Xuemin Guan

ʱ·É wrote:
> Hello Everyone£¬
>      I am new to the list , but I'm currently coding a simple XML editor for specific internal 
> reasons and I was wondering if anyone had done anything along the lines of displaying an
> entire XML document in a java JTree object, and then being able to write
> edits back to the file.  I'm having trouble combining the nodes on the tree
> with the nodes of XML elements.  Any help would be Greatly appreciated.
> best regards
>              Luo Shifei          
> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡worldheart at 263.net
>                       ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2002-11-25
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com

Xuemin Guan
Java & XML Developer
Appresso SpA (www.appresso.com)
Tel:  +81-3-4412-7790 (Direct)
      +81-3-4412-7700 (Representative)
Email: xuemin at appresso.com
-------------- next part --------------
 * This class is used to display a XML document in a form of a
 * interactive visible tree. When the window is closed, the system
 * does not exit (it only release resource). If the client of this class
 * wants to quit the whole system, the client program need either
 * set the windowListener, or need to run System.exit(0) explictly.
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;

import java.util.Iterator;
import java.util.List;

import org.jdom.*;
import org.jdom.input.SAXBuilder;

import java.io.File;

public class XMLTreeViewer extends JFrame{

	//The JTree to display the XML
	private JTree xmlTree;

	//The XML document to be output to the JTree
	private Document xmlDoc;

	DefaultMutableTreeNode tn;

	public XMLTreeViewer(Document doc){
		 this.xmlDoc = doc;
		 setSize(600, 450);
         tn= new DefaultMutableTreeNode("XML");


	private void initialize(){

		xmlTree = new JTree();
		xmlTree.setName("XML Tree");
		getContentPane().add(new JScrollPane(xmlTree), BorderLayout.CENTER);

        processElement(xmlDoc.getRootElement(), tn);

		addWindowListener(new java.awt.event.WindowAdapter(){
			      public void windowClosing(java.awt.event.WindowEvent e){
					  //release all the resource
					  xmlTree = null;
					  tn = null;
			} );


	 private void processElement(Element el, DefaultMutableTreeNode dmtn) {
		 DefaultMutableTreeNode currentNode =
		 	new DefaultMutableTreeNode(el.getName());
		 String text = el.getTextNormalize();
		 if((text != null) && (!text.equals("")))
		 	currentNode.add(new DefaultMutableTreeNode(text));

		 processAttributes(el, currentNode);

		 Iterator children = el.getChildren().iterator();

		 	processElement((Element)children.next(), currentNode);


	 private void processAttributes(Element el, DefaultMutableTreeNode dmtn) {
		 Iterator atts = el.getAttributes().iterator();

			 Attribute att = (Attribute) atts.next();
			 DefaultMutableTreeNode attNode =
			 	new DefaultMutableTreeNode("@"+att.getName());
			 attNode.add(new DefaultMutableTreeNode(att.getValue()));

	public static void main(String args[])
		throws Exception
		if(args.length != 1){
			System.out.println("Usage: java XMLTreeViewer "+
				"[XML Document filename]");

		SAXBuilder builder = new SAXBuilder();
		Document doc = builder.build(new File(args[0]));
		XMLTreeViewer viewer = new XMLTreeViewer(doc);
		viewer.addWindowListener(new java.awt.event.WindowAdapter(){
			      public void windowClosing(java.awt.event.WindowEvent e){
			} );

More information about the jdom-interest mailing list