Liste in Baumstruktur einlesen

Status
Nicht offen für weitere Antworten.
M

martin86

Gast
Hallo!
Folgendes Problem:
Ich habe einen Vector, indem ich Wertepaare einer rekursiven Datenstruktur (ähnlich wie XML, jedoch nur mit Open/Close-Tags und Textinhalt - bereits vollständig ipmlementiert) gespeichert habe und soll dieses nun in einer Baumstruktur darstellen.
Bsp:

Vector<MyPair>: [(OPEN, "tag1"), (OPEN, "tag2"), (TEXT, "text1"), (CLOSE, "tag2), (TEXT "text2"), (CLOSE, "tag1")]

repräsentiert folgende Baumstruktur:
<tag1>
<tag2>text1</tag2>
text2
</tag1>

diese wird mit meiner datenstruktur erstellt mit:

Code:
Text t1 = new Text("text1");
Text t2 = new Text("text2");
Element e1 = new Element("tag1");
Element e2 = new Element("tag2");

e2.add(t1);
e1.add(e1);
e1.add(t2);

Wie kann ich dies automatisch realisieren. am einfachsten dürfte das wohl mit Rekursion gehen, aber ich weiss nicht
wie ich diese Baumhierarchie durchlaufen soll. Muss ich da nicht irgendwie alle Ebenen zwischenspeichern, damit diese später zur Verfügung stehen, wenn ich später noch elemente in dieser ebene einfügen will??
Hat irgendjemand Ideen?

mfg martin

[/code]
 
S

SlaterB

Gast
wenn die Elemente in der richtigen Reihenfolge stehen, dann musst du dir nicht alles merken,
ansonsten wäre es eh schwer, falls nicht alle Elemente eine eindeutige Id haben,

so, du musst natürlich etwas von Rekursion verstehen,
wenn du noch gar nix dazu kennst dann empfehle ich erstmal, mit einfacheren Dingen zu üben, z.B. die Fakultät zu einer Zahl rekursiv auszurechen,

hier würde die Rekursion etwa wie folgt aussehen:

int rek(Element, Liste, index) {
// aktuelle Element in der Liste muss ein open sein,
// Element erstellen, im parent-Element einfügen

// weitere Elemente anschauen:
// wenn open, dann rek() aufrufen (*),
// wenn normaler Text, dann als Text-Element einfügen
// wenn Close dann fertig
}

die rek-Operation gibt den aktuellen Index zurück, damit der Aufrufer nach (*) weiß, bei welchem Index es weitergeht,
außerdem wird immer das aktuelle Element übergeben,
damit Unterelemente darin eingefügt werden können
 
M

martin86

Gast
Hallo!
Zuerst mal danke für die Antwort!

Also die Elmente stehen in meinen Vector in genau der Reihenfolge, wie sie gelesen wurden und es können in einer bereits durchlaufenen Ebene durchaus auch noch später Elemente/Texte hinzugefügt werden, d.h der Baum ist nicht symmetrisch, was vermutlich das Problem ist.

z.B ist auch möglich:

Code:
<report>
  <title>mytitle</title>
  <sentence>This is <emphasis>my</emphasis> sentence!</sentence>
</report>

Habe deinen Vorschlag jetzt übersetzt und erhalte nun natürlich aber einen symmetrischen Baum (=falsch)!

Code:
<report>
   <title>mytitle
        <sentence>This is
             <emphasis>my</emphasis>
        </sentence>
    </title>
</report>

Mein Code:

Code:
Tree t = new Element(list.get(0).name)  //root element
makeTree(t, index);

private Tree buildTree(Tree t, int index) {
     if(index >= list.size())
                 return t;
     if(list.get(index).type == Type.TEXT) {   //text
	  t.add(new Text(list.get(index).name));
	  buildTree(t, ++index);
     }
    else if(list.get(index).type == Type.OPENTAG) //element
	  t.add(buildTree(new Element(list.get(index).name), ++index));
    else
       buildTree(t, ++index);
    return t;
 }
 

Wildcard

Top Contributor
Gibt es eigentlich einen bestimmten Grund warum du auf diese Liste bestehst, anstatt die Struktur realitätsnahe in einem Objektbaum abzubilden?

EDIT:
Oder möchtest du genau das, und die Liste ist nur eine Art Zwischenschritt nach dem Parsen? ???:L
Ist doch eine recht einfache Grammatik. Ich würde mir das vermutlich einfach durch einen Generator wie AntLR erzeugen lassen.
http://www.antlr.org/
 
S

SlaterB

Gast
@martin86
hmm, das ist schon ziemlich gut geworden,
dadurch, dass du etwa bei einem Text-Element die Rekursion mit dem gleichen t aufrufst, sparst du dir, mehrere Elemente aus der Liste abzufragen,
daran hatte ich nicht gedacht,

ein wichtiger Schritt dürfte nun noch sein, bei einem close gleich zu returnen,
dann müsste sentence erst von report aus gefunden werden, nicht von title,

ich glaube aber, dass du dann Probleme mit dem index bekommen wirst,
das klappt bisher nur durch die Symmetrie so gut,
also: wie in meinem Vorschlag als Rückgabewert den index weitergeben,
nachdem von report aus die Rekursion zu title aufgerufen und abgearbeitet wurde,
muss der report-Aufruf wissen, dass der nächste zu untersuchende Index der von sentance ist
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
A GSON - Liste mit Interfaces XML & JSON 4
L JAXB - Generischen Wert mit Liste belegen XML & JSON 1
D XML Liste erstellen XML & JSON 9
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
H Liste voller Objekte und Werte in XML via XStream XML & JSON 3
C root.getChildren() - Liste sortieren - ClassCastException XML & JSON 2
W Element Liste in Root XML & JSON 5
G Xml Elemente in eine Liste abspeichern! XML & JSON 2
S aus XML mit JAXB zu Baumstruktur XML & JSON 3
S Aus XML-File eine Baumstruktur erzeugen XML & JSON 5
iman XML Attribute mit JAVA einlesen mit Spring Batch XML & JSON 0
J Object in JSON Datei einlesen und als neues Object erzeugen (in ein Object Array) XML & JSON 29
I Mit Hibernate eine XML-Datei in eine Tabellenspalte einlesen. XML & JSON 1
L XML einlesen gleichnamige Elemente XML & JSON 5
T HTML mit Hilfe Jsoup einlesen XML & JSON 11
R xlsx-Datei mit Apache POI einlesen XML & JSON 18
S CSV Datei einlesen und XML Ausgeben XML & JSON 2
W XML einlesen und Attribute auslesen XML & JSON 1
M XML Werte einlesen aber wie am besten weiterverarbeiten? XML & JSON 13
L XML nur ein Element einlesen XML & JSON 2
L Jackson JSON: Probleme beim einlesen XML & JSON 1
S XML in JTable Einlesen XML & JSON 3
B XML analysieren und einlesen XML & JSON 26
Z XML Datei mit JDOM einlesen und verarbeiten XML & JSON 6
Ollek XML Einlesen - Welche API ist die richtige? XML & JSON 14
X XML einlesen XML & JSON 6
C JAXB: XML-Elemente einlesen und als XML-Attribute ausgeben XML & JSON 7
jstei001 .xsd File wärend der Laufzeit einlesen und XMl rausschreiben XML & JSON 5
J XML mit russischem Inhalt einlesen XML & JSON 4
D XML Einlesen mit JaxB XML & JSON 4
K Einlesen eines Parameters aus HTML-Datei XML & JSON 4
D Wie XML Datei einlesen und HTML entities übernehmen? XML & JSON 3
B Validierung nur beim einlesen oder auch beim schreiben? XML & JSON 4
B SAX-Parser - Dokumente einlesen und in einer Map ablegen XML & JSON 2
N xsd pattern in java einlesen XML & JSON 6
F Einlesen von JDBC connection in Java von XML XML & JSON 4
J wert IN einem tag einlesen/schreiben XML & JSON 4
F XML erzeugen aus JTree und wieder einlesen... XML & JSON 6
N JDOM: XML einlesen XML & JSON 4
F XML mit DOM einlesen- Teile in Arraylist speichern XML & JSON 4
S XML einlesen XML & JSON 18
F XML Datei in Java einlesen XML & JSON 4
H XMI über EMF / UML2 einlesen XML & JSON 7
S XML einlesen, analysieren, bearbeiten & als Textdatei ausgeben XML & JSON 1
E XML Datei einlesen und Elemente in der Console ausgeben XML & JSON 6
H xml-Datei mit Attributen einlesen XML & JSON 3
C xml "zeilenweise" einlesen XML & JSON 6
B XML einlesen und in Datenbank schreiben XML & JSON 1
S XML-Schema einlesen um parsen zu erleichtern? XML & JSON 2
L Element einlesen <Telefon name="Karl">134313 XML & JSON 2
G XML Tag beim Einlesen manipulieren XML & JSON 2
J XML-Datei ein Array einlesen XML & JSON 10
P Große XML Datei mittels JDOM bearbeiten / einlesen XML & JSON 6
G Simples XML File einlesen mit JDom. Prefix not bound ? XML & JSON 2
D nicht (ganz) valiedes XML einlesen! XML & JSON 19
S Einlesen einer xml Datei XML & JSON 4
S XML Datei einlesen, aber root überspringen XML & JSON 2
M XML einlesen - prüfen ob Element vorhanden XML & JSON 2
M NullPointerException bei Einlesen XML XML & JSON 3
J XML - schreiben und einlesen (Schema) XML & JSON 14
S XML Strings in JAVA einlesen, aber wie? XML & JSON 8
K JDOM SAXBuilder einlesen XML & JSON 6
G Newbe - Frage.XML - Datei einlesen und speichern XML & JSON 2
G xml einlesen und bestimmte Elemente an eine gui_Klasse überg XML & JSON 25
B XML String einlesen XML & JSON 4
M mit JDOM XML-Datei einlesen, die nicht "well-formed&quo XML & JSON 3
T Newbie Frage. CSS Stylesheet einlesen und suchen nach Tags XML & JSON 6
P OutOfMemoryError beim Einlesen einer XML-Datei XML & JSON 7
C Zeile herausfinden in der ein Fehler beim Einlesen entsteht XML & JSON 3
R wie kann ich ein xml file in einen string einlesen? XML & JSON 2
N Objekte via XML speichern und wieder einlesen XML & JSON 12
R POST REQUEST: XmlDocument mit getInputStream einlesen! XML & JSON 6

Ähnliche Java Themen


Oben