Java tutorial
import java.awt.BorderLayout; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; public class StAXStreamTreeViewer extends JFrame { private JTree jTree; DefaultTreeModel defaultTreeModel; public StAXStreamTreeViewer() throws Exception { StAXStreamTreeViewer viewer = new StAXStreamTreeViewer(); File file = new File("yourXML.xml"); DefaultMutableTreeNode base = new DefaultMutableTreeNode("XML Document: " + file.getAbsolutePath()); defaultTreeModel = new DefaultTreeModel(base); jTree = new JTree(defaultTreeModel); buildTree(defaultTreeModel, base, file); getContentPane().add(new JScrollPane(jTree), BorderLayout.CENTER); viewer.setVisible(true); setSize(800, 450); } public static void main(String[] args) throws Exception { new StAXStreamTreeViewer(); } public void buildTree(DefaultTreeModel treeModel, DefaultMutableTreeNode current, File file) throws XMLStreamException, FileNotFoundException { FileInputStream inputStream = new FileInputStream(file); XMLInputFactory inputFactory = XMLInputFactory.newInstance(); XMLStreamReader reader = inputFactory.createXMLStreamReader(inputStream); addStartDocumentNodes(reader, current); parseRestOfDocument(reader, current); } private void addStartDocumentNodes(XMLStreamReader reader, DefaultMutableTreeNode current) { DefaultMutableTreeNode version = new DefaultMutableTreeNode(reader.getVersion()); current.add(version); DefaultMutableTreeNode standalone = new DefaultMutableTreeNode(reader.isStandalone()); current.add(standalone); DefaultMutableTreeNode standaloneSet = new DefaultMutableTreeNode(reader.standaloneSet()); current.add(standaloneSet); DefaultMutableTreeNode encoding = new DefaultMutableTreeNode(reader.getEncoding()); current.add(encoding); DefaultMutableTreeNode declaredEncoding = new DefaultMutableTreeNode(reader.getCharacterEncodingScheme()); current.add(declaredEncoding); } private void parseRestOfDocument(XMLStreamReader reader, DefaultMutableTreeNode current) throws XMLStreamException { while (reader.hasNext()) { int type = reader.next(); switch (type) { case XMLStreamConstants.START_ELEMENT: DefaultMutableTreeNode element = new DefaultMutableTreeNode(reader.getLocalName()); current.add(element); current = element; if (reader.getNamespaceURI() != null) { String prefix = reader.getPrefix(); if (prefix == null) { prefix = "[None]"; } DefaultMutableTreeNode namespace = new DefaultMutableTreeNode( "prefix = '" + prefix + "', URI = '" + reader.getNamespaceURI() + "'"); current.add(namespace); } if (reader.getAttributeCount() > 0) { for (int i = 0; i < reader.getAttributeCount(); i++) { DefaultMutableTreeNode attribute = new DefaultMutableTreeNode( "Attribute (name = '" + reader.getAttributeLocalName(i) + "', value = '" + reader.getAttributeValue(i) + "')"); String attURI = reader.getAttributeNamespace(i); if (attURI != null) { String attPrefix = reader.getAttributePrefix(i); if (attPrefix == null || attPrefix.equals("")) { attPrefix = "[None]"; } DefaultMutableTreeNode attNamespace = new DefaultMutableTreeNode( "prefix=" + attPrefix + ",URI=" + attURI); attribute.add(attNamespace); } current.add(attribute); } } break; case XMLStreamConstants.END_ELEMENT: current = (DefaultMutableTreeNode) current.getParent(); break; case XMLStreamConstants.CHARACTERS: if (!reader.isWhiteSpace()) { DefaultMutableTreeNode data = new DefaultMutableTreeNode("CD:" + reader.getText()); current.add(data); } break; case XMLStreamConstants.DTD: DefaultMutableTreeNode dtd = new DefaultMutableTreeNode("DTD:" + reader.getText()); current.add(dtd); break; case XMLStreamConstants.SPACE: break; case XMLStreamConstants.COMMENT: DefaultMutableTreeNode comment = new DefaultMutableTreeNode(reader.getText()); current.add(comment); break; default: System.out.println(type); } } } }