import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.events.XMLEvent; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; public class TreeViewer extends JFrame{ TreeViewer(JTree jtree) { super("Tree viewer"); setBounds(100,100,600,450); getContentPane().add(new JScrollPane(jtree)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static DefaultMutableTreeNode jTreeBuild(Node node) { if (node == null) return null; switch (node.getNodeType()) { case Node.ELEMENT_NODE: { DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(node.getNodeName()); NamedNodeMap attrs = node.getAttributes(); for (int i = 0; i < attrs.getLength(); i++) treeNode.add( new DefaultMutableTreeNode( '@'+attrs.item(i).getNodeName()+ '['+attrs.item(i).getNodeValue()+']')); // process children Node child = node.getFirstChild(); while(child != null){ DefaultMutableTreeNode childTree = jTreeBuild(child); if(childTree!=null) treeNode.add(childTree); child = child.getNextSibling(); } return treeNode; } case Node.TEXT_NODE: { String text = node.getNodeValue().trim(); return text.length()==0 ? null : new DefaultMutableTreeNode(text); } default : return null; // ignore other types of nodes } } public static DefaultMutableTreeNode jTreeBuild (XMLStreamReader xmlsr) throws XMLStreamException{ if(xmlsr.isStartElement()){ DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(xmlsr.getLocalName()); int count = xmlsr.getAttributeCount();// attributes for (int i = 0; i < count; i++) { treeNode.add( new DefaultMutableTreeNode( "@"+xmlsr.getAttributeLocalName(i)+ '['+xmlsr.getAttributeValue(i)+']')); } while (true){ do {xmlsr.next();} while(xmlsr.isWhiteSpace()); if(xmlsr.getEventType()==XMLEvent.END_ELEMENT)break; DefaultMutableTreeNode childTree = jTreeBuild(xmlsr); if(childTree!=null) treeNode.add(childTree); } return treeNode; } else if (xmlsr.isCharacters()){ return new DefaultMutableTreeNode(xmlsr.getText()); } else return null; } }