XML in JTree
Frank
- java
0 Slyh0 Biesterfeld0 Frank
Hallo zusammen,
ich versuche eine XML-Struktur in einem JTree mit einer rekursiven Funktion abzubilden.
Hier das XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<menu>
<menuitem>
<name>1</name>
<label>Startseite</label>
<action></action>
<target>_self</target>
<link>index.html</link>
<menu>
<menuitem>
<name>1.2</name>
<label>Seite 1.2</label>
<action></action>
<target>_self</target>
<link>index2.html</link>
</menuitem>
</menu>
</menuitem>
<menuitem>
<name>2</name>
<label>Seite 2</label>
<action></action>
<target>_self</target>
<link>index3.html</link>
</menuitem>
</menu>
Hier mein Code:
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import org.jdom.Document;
import org.jdom.Element;
public class TreeTest {
public static void xmlToJTree(Element menuroot, DefaultMutableTreeNode parentNode) {
Iterator allitems;
Element currentMenuitem = null;
allitems = menuroot.getChildren("menuitem").iterator();
while (allitems.hasNext()) {
currentMenuitem = (Element) allitems.next();
parentNode.add(new DefaultMutableTreeNode(currentMenuitem.getChild("label").getText()));
if (currentMenuitem.getChildren("menu").size() > 0) {
xmlToJTree(currentMenuitem.getChild("menu"), parentNode);
}
}
}
public static void main(String[] args) {
DefaultMutableTreeNode initNode = new DefaultMutableTreeNode("Root");
String pathtomenuxml = ApplicationPathProperties.getXMLPagePath() + "/1/menu/1.xml";
Document xmlbasicdoc = XMLFunctions.getXMLDocument(pathtomenuxml);
Element initLevel = xmlbasicdoc.getRootElement();
if (xmlbasicdoc.hasRootElement()) {
xmlToJTree(initLevel, initNode);
}
JTree testtree = new JTree(initNode);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(testtree));
frame.pack();
frame.setVisible(true);
}
}
Die Rekursion wird auch sauber durchlaufen, allerdings hängen im JTree alle Elemente auf der ersten Ebene... Mhmmm....
Was läuft da schief?
Vielen Dank schon mal und noch einen schönen Sonntagabend!
Frank
Hallo,
Die Rekursion wird auch sauber durchlaufen, allerdings hängen im JTree alle Elemente auf der ersten Ebene... Mhmmm....
Ich habe mir den Code jetzt nicht wirklich angeschaut. Im Grunde kannst du
aber vermutlich den Fehler auch durch Debugging alleine finden. Laufe Schritt
für Schritt den Code durch und schaue zu welchem Zeitpunkt welche Werte in den
Variablen enthalten sind und welche Methoden mit welchen Parametern aufgerufen
werden. Damit dürftest du in wenigen Minuten herausfinden können, was bei der
Programmausführung schief läuft. So komplex ist der Code und die XML-Struktur
ja nun nicht.
Gruß
Slyh
Hej,
falls Dein Debugging bisher erfolglos gewesen sein sollte:
> public static void xmlToJTree(Element menuroot, DefaultMutableTreeNode parentNode) {
>
> Iterator allitems;
> Element currentMenuitem = null;
> allitems = menuroot.getChildren("menuitem").iterator();
>
> while (allitems.hasNext()) {
> currentMenuitem = (Element) allitems.next();
> parentNode.add(new DefaultMutableTreeNode(currentMenuitem.getChild("label").getText())); // **
> if (currentMenuitem.getChildren("menu").size() > 0) {
> xmlToJTree(currentMenuitem.getChild("menu"), parentNode);
// ^--------------*
> }
> }
> }
*) Dein Rekursiver Aufruf bezieht sich offensichtlich immer auf das gleiche parentNode
-Objekt. Dabei möchtest du doch mit Sicherheit die Kinder des XML-Knotens dem korrespondierendem TreeNode
hinzufügen, den du zwei Zeilen weiter oben (**) erzeugst.
Beste Grüße
Biesterfeld
Hi Biesterfeld,
jaja, der Wald und die Bäume... ;-)
Danke für den Hinweis, jetzt klappts!
Grüße - Frank