创建XML树
下方代码片段将一个XML数据对象作为节点在一个树状结构中加载。
01 // 访问必需的XMLSpy Java-COM类
02 import com.altova.automation.XMLSpy.XMLData;
03
04 // 访问AWT和Swing组件
05 import java.awt.*;
06 import javax.swing.*;
07 import javax.swing.tree.*;
08
09 /**
10 * 这是一个简单示例,展示了一个树控件从XMLData对象加载结构。
11 * 该类接收一个XMLData对象,将其节点加载到JTree中,并准备
12 * 进行模式激活。
13 *
14 * 请随意修改和扩展本示例。
15 *
16 * @author Altova GmbH
17 */
18 class XMLTreeDialog extends JDialog
19 {
20 /**
21 * 树控件
22 */
23 private JTree myTree;
24
25 /**
26 * 树控件的根节点
27 */
28 private DefaultMutableTreeNode top ;
29
30 /**
31 * 构造器,用于准备包含填充树控件的模式对话框
32 * @param xml 要在树中展示的数据
33 * @param parent 父框架
34 */
35 public XMLTreeDialog( XMLData xml, Frame parent )
36 {
37 // 构造模式对话框
38 super( parent, "XML tree", true );
39 // 在对话框中排列控件
40 top = new DefaultMutableTreeNode("root");
41 myTree = new JTree(top);
42 setContentPane( new JScrollPane( myTree ) );
43 // 构建树
44 fillTree( top, xml );
45 myTree.expandRow( 0 );
46 }
47
48 /**
49 * 在一个给定的树节点下加载一个XML元素的节点
50 * @param node 目标树节点
51 * @param elem 源XML元素
52 */
53 private void fillTree( DefaultMutableTreeNode node, XMLData elem)
54 {
55 try
56 {
57 // 有几种方法可以遍历子元素:使用getFirstChild/getNextChild,
58 // 或通过将索引递增到countChildren并调用getChild [如下所示]。
59 // 如果您只想获取一种类型的子元素,则应使用countChildrenKind/getChildKind,
60 // 或在用getNextChild进行遍历之前为getFirstChild提供一种类型。
61 int nSize = elem.countChildren() ;
62 for ( int i = 0 ; i < nSize ; ++i)
63 {
64 // 为每个子元素创建一个新的树节点,然后递归继续
65 XMLData newElem = elem.getChild(i) ;
66 DefaultMutableTreeNode newNode = new DefaultMutableTreeNode( newElem.getName() ) ;
67 node.add( newNode ) ;
68 fillTree( newNode, newElem ) ;
69 }
70 }
71 catch (Exception e)
72 {
73 e.printStackTrace();
74 }
75 }
76
77 }