ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
1089
1089
EMPFEHLEN
-
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:
Code :1 2 3 4 5 6 7 8
<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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
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
-
XML so selber parsen ist aber sehr kompliziert. Eine einfache API wie XStream machts einfacher. In deinem Fall würde wahrscheinlich ein Stax-Parser auch recht gut funktionieren.
Wenn ein neues Element anfängt erstellt du dir ein TreeNode und merkst dir diesen in einer Variablen. Jedes Unterelement fügst du dann dem aktuellen hinzu und machst es selber zum aktuellen. Sobald ein Element endet rufst du auf dem aktuellen Knoten getParent auf und packst diesen in die Variable.
So solltest du nen Tree erhalten.
Ähnliche Themen
-
XML-Datei in JTree einlesen mittels JDOM
Von raffi im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 30.06.10, 20:35 -
JTree dynamisch erzeugen aus DB-Array
Von stefschi im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 1Letzter Beitrag: 29.05.09, 12:01 -
JTree aus Excel-Tabelle mit gruppierten Elementen erzeugen
Von flispy im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 17.05.08, 14:09 -
Datei rekursiv erstellen
Von gello im Forum JavaAntworten: 2Letzter Beitrag: 29.04.08, 16:33 -
Knoten-Attribute einer xsd-Datei in einem JTree auslesen
Von Perplex im Forum XML TechnologienAntworten: 0Letzter Beitrag: 20.07.05, 18:24





Zitieren

Login





