Hallo,
ich sitze derzeit an einem Programm was eine von mir selbst erstellte XML Datei in einen JTree einlesen soll und dementsprechend auch darstellen soll.
Nun habe ich konkret Probleme beim Einlesen, sobald ich die Kinder der Professuren, also die Veranstaltungen einfügen muss.
Die zugehörigen Methoden sehen derzeit so aus:
ist das so möglich oder sollte ich anders vorgehen?
MfG
ich sitze derzeit an einem Programm was eine von mir selbst erstellte XML Datei in einen JTree einlesen soll und dementsprechend auch darstellen soll.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<tuc>
<professur>
<profname>Wirtschaftsinformatik 1</profname>
<mail>aaa@aaa.de</mail>
<forschung>Geschäftsprozesse</forschung>
<veranstaltungen>
<veranstaltung>
<name>WI-Praktikum</name>
<verantwortlicher>xxx</verantwortlicher>
<raum>2/316</raum>
<typ>Praktikum</typ>
</veranstaltung>
<veranstaltung>
<name>Geschäftsprozessmodellierung und Management</name>
<verantwortlicher>xxx</verantwortlicher>
<raum>2/N112</raum>
<typ>Vorlesung</typ>
</veranstaltung>
<veranstaltung>
<name>E-Business</name>
<verantwortlicher>xxx</verantwortlicher>
<raum>2/D1</raum>
<typ>Vorlesung</typ>
</veranstaltung>
</veranstaltungen>
</professur>
<professur>
<profname>Wirtschaftsinformatik 2</profname>
<mail>bbb@bbb.de</mail>
<forschung>Systementwicklung und BI</forschung>
<veranstaltungen>
<veranstaltung>
<name>IIS</name>
<verantwortlicher>xxx</verantwortlicher>
<raum>2/N102</raum>
<typ>Vorlesung</typ>
</veranstaltung>
<veranstaltung>
<name>AIS</name>
<verantwortlicher>xxx</verantwortlicher>
<raum>2/NK003</raum>
<typ>Uebung</typ>
</veranstaltung>
<veranstaltung>
<name>Gestaltung von Anwendungssystemen</name>
<verantwortlicher>xxxt</verantwortlicher>
<raum>2/N105</raum>
<typ>Vorlesung</typ>
</veranstaltung>
</veranstaltungen>
</professur>
<professur>
<profname>Betriebssysteme</profname>
<mail>ccc@ccc.de</mail>
<forschung>Betriebssyteme</forschung>
<veranstaltungen>
<veranstaltung>
<name>Grundlagen der Anwendungsunterstützung</name>
<verantwortlicher>xxx</verantwortlicher>
<raum>1/346</raum>
<typ>Vorlesung</typ>
</veranstaltung>
</veranstaltungen>
</professur>
</tuc>
Nun habe ich konkret Probleme beim Einlesen, sobald ich die Kinder der Professuren, also die Veranstaltungen einfügen muss.
Die zugehörigen Methoden sehen derzeit so aus:
Code:
private void openFile () {
JFileChooser jfc = new JFileChooser();
if (jfc.showOpenDialog(frame) == jfc.APPROVE_OPTION) {
File file = jfc.getSelectedFile();
DefaultMutableTreeNode root = readFile(file);
if (root != null) {
model = new DefaultTreeModel(root);
tree.setModel(model);
}
}
}
private DefaultMutableTreeNode readFile (File file) {
DefaultMutableTreeNode root = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = null;
try {
SAXBuilder builder = new SAXBuilder();
doc = builder.build(file);
}
catch (Exception e) {
e.getMessage();
doc = null;
}
if (doc == null) {
return null;
}
Element nRoot = doc.getRootElement();
if (!nRoot.getName().equals("tuc")) {
return null;
}
root = createNode(nRoot);
return root;
}
private DefaultMutableTreeNode createNode (Element profNode) {
DefaultMutableTreeNode childNode;
DefaultMutableTreeNode tucNode;
tucNode = new DefaultMutableTreeNode();
firstList = profNode.getChildren();
for (int i = 0; i < firstList.size(); i++) {
Element firstEl = (Element)firstList.get(i);
Element el = (Element) firstEl;
tucNode.add(createProfessurNode(el));
}
return tucNode;
}
@SuppressWarnings("unchecked")
private DefaultMutableTreeNode createProfessurNode (Element el) {
String profName = null;
String mail = null;
String forschung = null;
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode();
List childList = el.getChildren();
for (int i = 0; i < childList.size(); i++) {
Element dummyEl = (Element)childList.get(i);
if (dummyEl.getName().equals("profname")) {
profName = dummyEl.getValue();
}
else if (dummyEl.getName().equals("mail")) {
mail = dummyEl.getValue();
}
else if (dummyEl.getName().equals("forschung")) {
forschung = dummyEl.getValue();
}
else if (dummyEl.getName().equals("veranstaltungen")) { //Veranstaltungsobjekt einlesen
/*List vList = dummyEl.getChildren(); //alte Variante die natürlich so nicht funktionieren kann
for (int j = 0; j < vList.size(); j++) {
Element childEl = (Element)vList.get(j);
childNode.add(createVeranstNode(childEl));
return childNode;
}*/
createVeranstNode(dummyEl);
}
}
return new DefaultMutableTreeNode(new Professur(profName, mail, forschung));
}
private DefaultMutableTreeNode createVeranstNode (Element el) {
String veranstName = null;
String raum = null;
String verantwortlicher = null;
String typ = null;
List firstChildList = el.getChildren();
for (int i = 0; i < firstChildList.size(); i++) {
Element dummyEl = (Element) firstChildList.get(i);
List childList = dummyEl.getChildren();
for (int j = 0; j < childList.size(); j++) {
Element childEl = (Element) childList.get(j);
if (childEl.getName().equals("name")) {
veranstName = childEl.getValue();
}
else if (childEl.getName().equals("verantwortlicher")) {
verantwortlicher = childEl.getValue();
}
else if (childEl.getName().equals("raum")) {
raum = childEl.getValue();
}
else if (childEl.getName().equals("typ")) {
typ = childEl.getValue();
}
}
//hier möchte ich einen extra Baum aufbauen umd diesen dann zurückzugeben und an den eigentlichen Baum anzuhängen. Ist das möglich?
}
//System.out.println(veranstName+" "+verantwortlicher+" "+raum+" "+typ);
return new DefaultMutableTreeNode(new Lehrveranstaltung(veranstName, verantwortlicher, raum, typ)); // hier sollte dann natrülich der Baum zurückgegeben werden
}
MfG
Zuletzt bearbeitet: