Hallo,
ich versuche mich im Moment mit Java und XML, komme nur nicht weiter.
Ich möchte eine XML-Datei einlesen und in einem JTree darstellen. Ich habe nur das Problem, dass Einträge erscheinen die keinen Namen besitzen und ich nicht weiß wo mein Fehler liegt.
Die XML-Datei die ich einlese:
Der JTree sieht dann so aus:
Der Code:
Angezeigt soll im JTree lediglich das Attribut 'name' eines Elementes aus der XML-Datei.
Dabei stören mich jetzt die ersten beiden Knoten ohne Namen und der leere Knoten unter "Schulze".
Als Lösung hatte ich mir vorgestellt nur Elemente aus der XML-Datei eizufügen, die ein Attribut "name" besitzen (dabei würde ja der Knoten "Harald" rausfallen, was aber nicht weiter störend wäre). Bekomme ich allerdings nicht hin.
Würd mich freuen, wenn mir jemand weiterhelfen könnte.
Nehme natürliche auch andere Lösungen an, um die leeren Knoten nicht anzuzeigen.
ich versuche mich im Moment mit Java und XML, komme nur nicht weiter.
Ich möchte eine XML-Datei einlesen und in einem JTree darstellen. Ich habe nur das Problem, dass Einträge erscheinen die keinen Namen besitzen und ich nicht weiß wo mein Fehler liegt.
Die XML-Datei die ich einlese:
Code:
<?xml version="1.0" ?>
<root>
<person name="Meier" alter="30" />
<person name="Schulze" alter ="20">
<vorname>Harald</vorname>
<vater name="Schulze2" alter="50"/>
</person>
</root>
Der JTree sieht dann so aus:
Der Code:
Code:
private void read(File file, DefaultMutableTreeNode root) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(file);
buildTree(doc, root);
} catch (Exception e) { JOptionPane.showMessageDialog(this,e); }
}//read
private void buildTree(Node node,DefaultMutableTreeNode parentTreeNode) {
DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode();
switch (node.getNodeType()) {
case Node.COMMENT_NODE:
treeNode.setUserObject(node.getTextContent());
break;
case Node.ELEMENT_NODE:
String s = getAttr(node);
treeNode.setUserObject(s);
break;
case Node.TEXT_NODE:
String textContent = node.getTextContent().trim();
if (textContent.equals("")) {
return;
}
treeNode.setUserObject(textContent);
break;
}//switch
parentTreeNode.add(treeNode);
if (node.hasChildNodes()) {
NodeList list = node.getChildNodes();
for (int i = 0, len = list.getLength(); i < len; i++) {
buildTree(list.item(i), treeNode);
}
}
}//buildTree
public String getAttr(Node node) {
StringBuilder s = new StringBuilder();
NamedNodeMap atts = node.getAttributes(); //Menge der Attribute
int n = atts.getLength();
if(n > 0) {
for(int i=0; i<n; i++) {
Attr nodeAttr = (Attr) atts.item(i);
if (nodeAttr.getNodeName().equals("name"))
s.append(nodeAttr.getNodeValue());
}
}
if (n < 1) {
return null;
}
return s.toString();
}//getAttr
Angezeigt soll im JTree lediglich das Attribut 'name' eines Elementes aus der XML-Datei.
Dabei stören mich jetzt die ersten beiden Knoten ohne Namen und der leere Knoten unter "Schulze".
Als Lösung hatte ich mir vorgestellt nur Elemente aus der XML-Datei eizufügen, die ein Attribut "name" besitzen (dabei würde ja der Knoten "Harald" rausfallen, was aber nicht weiter störend wäre). Bekomme ich allerdings nicht hin.
Würd mich freuen, wenn mir jemand weiterhelfen könnte.
Nehme natürliche auch andere Lösungen an, um die leeren Knoten nicht anzuzeigen.