StAXStreamTreeViewer.java Source code

Java tutorial

Introduction

Here is the source code for StAXStreamTreeViewer.java

Source

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);
            }
        }
    }

}