Skip to content

Instantly share code, notes, and snippets.

/XmlToJtree.java Secret

Created May 22, 2015 20:18
Show Gist options
  • Save anonymous/1602e973ac0dc764b1b9 to your computer and use it in GitHub Desktop.
Save anonymous/1602e973ac0dc764b1b9 to your computer and use it in GitHub Desktop.
XML to JTree with broken nodes: attributes should be leaves
/**
* Uses code from Ibbtek <http://ibbtek.altervista.org/XML2JTree> under MIT
* license.
*/
package xml;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XmlToJtree {
private Document document;
private DefaultTreeModel treeModel;
private JTree treeView;
public XmlToJtree(String filePath) {
if (filePath != null) {
document = getDomFromFile(filePath);
}
if (document != null) {
treeModel = new DefaultTreeModel(buildTreeNode(document));
}
if (treeModel != null) {
treeView = new JTree(treeModel);
}
}
private DefaultMutableTreeNode buildTreeNode(Node rootNode) {
DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(
rootNode.getNodeName());
NodeList children = rootNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node node = children.item(i);
short nodeType = node.getNodeType();
if (nodeType == Node.ELEMENT_NODE) {
treeNode.add(buildTreeNode(node));
// FIXME attributes should be leaves of their nodes
if (node.hasAttributes()) {
NamedNodeMap attributes = node.getAttributes();
for (int j = 0; j < attributes.getLength(); j++) {
Node attr = attributes.item(j);
treeNode.add(new DefaultMutableTreeNode("@" + attr));
}
}
} else if (nodeType == Node.TEXT_NODE) {
String text = node.getTextContent().trim();
if (!text.equals("")) {
treeNode.add(new DefaultMutableTreeNode(text));
}
} else if (nodeType == Node.COMMENT_NODE) {
String comment = node.getNodeValue().trim();
treeNode.add(new DefaultMutableTreeNode("#" + comment));
}
}
return treeNode;
}
private Document getDomFromFile(String filePath) {
Document document = null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
document = dbf.newDocumentBuilder().parse(filePath);
document.normalizeDocument();
} catch (IOException | ParserConfigurationException | SAXException e) {
e.printStackTrace();
}
return document;
}
public void showPopUp(String title, int width, int height) {
if (treeView != null) {
JFrame frame = new JFrame();
frame.setTitle(title);
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(new JScrollPane(treeView));
frame.add(new JPanel(new GridLayout(1, 1)), BorderLayout.SOUTH);
frame.setVisible(true);
}
}
public static void main(String[] args) {
XmlToJtree x2j = new XmlToJtree("simple.xml");
x2j.showPopUp("XML", 400, 600);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment