Altova XMLSpy 2024 Enterprise Edition

The listing below loads an XML data object as nodes in a tree.

 

 

01 // access required XMLSpy Java-COM classes

02 import com.altova.automation.XMLSpy.XMLData;

03

04 // access AWT and Swing components

05 import java.awt.*;

06 import javax.swing.*;

07 import javax.swing.tree.*;

08

09 /**

10  * A simple example of a tree control loading the structure from an XMLData object.

11  * The class receives an XMLData object, loads its nodes in a JTree, and prepares

12  * for modal activation.

13  *

14  * Feel free to modify and extend this sample.

15  *

16  * @author Altova GmbH

17  */

18 class XMLTreeDialog extends JDialog

19 {

20   /**

21    * The tree control

22    */

23   private JTree myTree;

24  

25   /**

26    * Root node of the tree control

27    */

28   private DefaultMutableTreeNode top ;

29

30   /**

31    * Constructor that prepares the modal dialog containing the filled tree control

32    * @param xml   The data to be displayed in the tree

33    * @param parent  Parent frame

34    */

35   public XMLTreeDialog( XMLData xml, Frame parent )

36   {

37     // Construct the modal dialog

38     super( parent, "XML tree", true );

39     // Arrange controls in the dialog

40     top = new DefaultMutableTreeNode("root");    

41     myTree = new JTree(top);

42     setContentPane( new JScrollPane( myTree ) );

43     // Build up the tree

44     fillTree( top, xml );

45     myTree.expandRow( 0 );

46   }

47

48   /**

49    * Loads the nodes of an XML element under a given tree node

50    * @param node  Target tree node

51    * @param elem  Source XML element

52    */

53   private void fillTree( DefaultMutableTreeNode node, XMLData elem)

54   {

55     try

56     {

57       // There are several ways to iterate through child elements: either using the getFirstChild/getNextChild,

58       // or by incrementing an index up to countChildren and calling getChild [as shown below].

59       // If you only want to get children of one kind, you should use countChildrenKind/getChildKind,

60       // or provide a kind to the getFirstChild before iterating with the getNextChild.

61       int nSize = elem.countChildren() ;

62       for ( int i = 0 ; i < nSize ; ++i)

63       {

64         // Create a new tree node for each child element, and continue recursively

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 }

 

© 2017-2023 Altova GmbH