Happyman
Grünschnabel
Hi Leute!
Sitze grad an einem Problem fest und hab zu wenig Programmiererfahrung, um da weiterzukommen (glaube ich) - oder ich komm einfach nicht drauf.
Also, Aufgabe ist es, eine XML-Datei einzulesen und deren Struktur in eine Baumstruktur zu überführen. Und das OHNE vorgefertigte Parser wie den DOM-Parser etc. (seufz)
Ich will das mit DefaultMutableTreeNodes lösen und dann in nem JTree ausgeben lassen.
Die kleine, feine Test-XML-Datei, die eingelesen werden soll, sieht so aus:
Und hier meine kleine Parser-Klasse - bestimmt nichts hochprofessionelles und absolut effizientes, aber es soll ja auch nur funktionieren
Mein Denkknoten liegt in der rekursiven Methode zerteilen(). Denn zur Zeit sieht die Ausgabe des Baumes so aus:
http://img200.imageshack.us/img200/9867/xml.png
Da müssen aber eigentlich "Autor", "Titel", "Seiten" und "ISBN" Kinder von "Buch" sein
Wie schaff ich dass, dass der mir den Baum wie gewünscht "mehr verschachtelt"
Vielen Dank im Voraus für eure Antworten :-*
Happyman
Sitze grad an einem Problem fest und hab zu wenig Programmiererfahrung, um da weiterzukommen (glaube ich) - oder ich komm einfach nicht drauf.
Also, Aufgabe ist es, eine XML-Datei einzulesen und deren Struktur in eine Baumstruktur zu überführen. Und das OHNE vorgefertigte Parser wie den DOM-Parser etc. (seufz)
Ich will das mit DefaultMutableTreeNodes lösen und dann in nem JTree ausgeben lassen.
Die kleine, feine Test-XML-Datei, die eingelesen werden soll, sieht so aus:
Code:
<buecherei>
<buch>
<autor>Dominik57</autor>
<titel>Versautes aus meinem Leben</titel>
<seiten>285</seiten>
<isbn>2375492928</isbn>
</buch>
</buecherei>
Und hier meine kleine Parser-Klasse - bestimmt nichts hochprofessionelles und absolut effizientes, aber es soll ja auch nur funktionieren
Code:
package xmlParser;
import java.io.*;
import java.util.regex.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import java.awt.Dimension;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
public class XMLparse {
static String datei = new JFileCHooserDemo().auswahlfenster();
static String dokument ="";
static String linie;
//Create the nodes.
static DefaultMutableTreeNode wurzel;
static DefaultMutableTreeNode knoten;
static DefaultMutableTreeNode blatt;
static int zaehler = 0;
public static void main(String argv[])
{
if (datei == null) {
System.err.println(
"Keine Datei gewählt!");
System.exit(1);
}
else {
parse();
ausgabe();
}
}
public static void parse() {
try {
FileReader dateileser = new FileReader(datei);
BufferedReader bufferleser = new BufferedReader(dateileser);
while((linie = bufferleser.readLine()) != null)
{
dokument += linie;
}
// dokument = dokument.replaceAll(" ", "");
dokument = dokument.replaceAll(" ", "");
// System.out.println(dokument);
dateileser.close();
bufferleser.close();
zerteilen(dokument);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void zerteilen(String str)
{
String zwischenspeicher = str;
Pattern p = Pattern.compile("(<)(\\w*)(>)(.*)</\\2>");
Matcher m = p.matcher(zwischenspeicher);
while (m.find())
{
zaehler += 1;
if (zaehler == 1)
{
wurzel = new DefaultMutableTreeNode(m.group(2));
}
else
{
knoten = new DefaultMutableTreeNode(m.group(2));
wurzel.add(knoten);
}
Matcher pruefmatcher = p.matcher(m.group(4));
if (pruefmatcher.find() == false)
{
blatt = new DefaultMutableTreeNode(m.group(4));
knoten.add(blatt);
}
zwischenspeicher = m.group(4);
zerteilen(zwischenspeicher);
}
}
public static void ausgabe(){
JTree tree = new JTree( wurzel );
JFrame frame = new JFrame( "XML-Baum" );
frame.add( new JScrollPane( tree ));
frame.setMinimumSize(new Dimension(200,400));
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
//frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}
Mein Denkknoten liegt in der rekursiven Methode zerteilen(). Denn zur Zeit sieht die Ausgabe des Baumes so aus:
http://img200.imageshack.us/img200/9867/xml.png
Da müssen aber eigentlich "Autor", "Titel", "Seiten" und "ISBN" Kinder von "Buch" sein
Wie schaff ich dass, dass der mir den Baum wie gewünscht "mehr verschachtelt"
Vielen Dank im Voraus für eure Antworten :-*
Happyman