Thomas Darimont
Erfahrenes Mitglied
Hallo!
Hier mal ein kleines Beispiel, wie ihr eine XML Datei auslesen und als Baumstruktur darstellen könnt. (Die Datei test.xml muss im selben Verzeichnis wie die Klasse liegen):
test.xml:
HTH Gruß Tom
Hier mal ein kleines Beispiel, wie ihr eine XML Datei auslesen und als Baumstruktur darstellen könnt. (Die Datei test.xml muss im selben Verzeichnis wie die Klasse liegen):
Code:
import java.awt.BorderLayout;
import java.io.IOException;
import java.util.Arrays;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class JXMLTreeTest extends JFrame {
private JTree tree;
private JScrollPane scrollPane;
public JXMLTreeTest() {
super("JXMLTreeTest");
setDefaultCloseOperation(EXIT_ON_CLOSE);
DefaultMutableTreeNode root = initTreeRoot("test.xml");
tree = new JTree(root);
scrollPane = new JScrollPane(tree);
getContentPane().add(scrollPane, BorderLayout.CENTER);
pack();
setVisible(true);
}
private DefaultMutableTreeNode initTreeRoot(String file) {
Document doc = null;
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(this.getClass().getResourceAsStream(file));
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (doc == null)
return new DefaultMutableTreeNode("EMPTY");
Node rootNode = doc.getFirstChild();
DefaultMutableTreeNode root =
new DefaultMutableTreeNode(rootNode.getNodeName());
treeWalk(rootNode, 0, root);
return root;
}
public static void treeWalk(
Node node,
int level,
DefaultMutableTreeNode parentNode) {
String nodeName = node.getNodeName();
DefaultMutableTreeNode childNode = null;
if (node.hasChildNodes()) {
level++;
System.out.println(repeat(level, ' ').append(nodeName));
NodeList list = node.getChildNodes();
int len = list.getLength();
for (int i = 0; i < len; i++) {
Node child = list.item(i);
childNode = new DefaultMutableTreeNode(child.getNodeName());
parentNode.add(childNode);
treeWalk(list.item(i), level, childNode);
}
} else {
childNode = new DefaultMutableTreeNode(node.getNodeValue());
System.out.println(
repeat(level, ' ').append(node.getTextContent()));
parentNode.add(childNode);
}
}
public static void main(String[] args) {
new JXMLTreeTest();
}
public final static StringBuffer repeat(int n, char c) {
char[] cA = new char[n];
Arrays.fill(cA, c);
return (StringBuffer) new StringBuffer().insert(0, cA);
}
}
test.xml:
Code:
<?xml version="1.0"?>
<root><!--comment abc def ghi--><a><b>ABC0</b></a><a><b>ABC1</b></a><a><b>ABC2</b></a><a><b>ABC3</b><c>ABBDG</c></a></root>
HTH Gruß Tom