Hallo Experten,
würde gerne mit STAX/SAX ein XML Dokument einlesen und verarbeiten. Hab das soweit auch alles super am laufen, nur bin ich mir absolut unsicher, wie man am besten die XML Struktur in eine Java Datenstruktur abbildet. Die beiden Parser liefern ja nur Events zum jeweiligen "Element".
Siehe folgendes Beispiel:
[XML]
<root>
<sub>
<subsub>
<subsubsub>
</subsubsub>
</subsub>
</sub>
</root
[/XML]
Angenommen das Dokument ist sehr tief (mit vielen Subelementen) und sehr vielfältig (mit sehr vielen unterschiedlichen Elementtypen), wie bilde ich das am besten im Java ab um genau zu wissen wo ich bin?
Man könnte z.B. jedem Element in XML eine boolean variable zuweisen und diese dann bei Start des Tags/Events (welche mir der Parser liefert) auf true setzen (und bei End-Tag auf false).
also
root=true;
sub=true;
subsub=true;
usw.
dann könnten ich später jederzeit bestimmen wo ich im Dokument bin und darauf testen:
if (root&&sub&&subsub) {
//jetzt weiss ich das in an der richtigen Position bin und kann z.B. den Content auslesen und in einem passenden subsubDTO den Wert setzen
}
Das ist nur super uneffizient mit den booleans (da ich für jedes Element händisch eine Variable anlegen muss, gerade bei sehr tiefen Dokumente oder sehr vielen unterschiedlichen Elementtypen). Welche Best-Practices gibt es diese Struktur in Java abzubilden? Ggf. ist es mit einer Arraylist am einfchsten und direkt den Element-Namen als String reinspeichern? Testen ist dann leider nicht ganz so schön wie oben mit boolean aber ggf. könnte man dafür eine Methode schreiben die das erledigt...
Ihr XML Profis habt dafür aber bestimmt noch eine viel clevere Lösung. Wie macht Ihr das wenn ihr solche XML Strukturen in Java speichern müsst (um zu prüfen wo ihr im Dokument seid), was sind da gute Tipps oder gerne auch Beispiele (hab schon gegooglet aber so weit reichen die Beispeile immmer in Netz nicht, die loggen immer nur das eingelsene XML wieder direkt aus). (Oder gibts vielleicht eine Funktion die mir die genaue Position doch irgendwie liefert und auf die ich einfach testen kann?)
Vielen Dank!!
Tim
würde gerne mit STAX/SAX ein XML Dokument einlesen und verarbeiten. Hab das soweit auch alles super am laufen, nur bin ich mir absolut unsicher, wie man am besten die XML Struktur in eine Java Datenstruktur abbildet. Die beiden Parser liefern ja nur Events zum jeweiligen "Element".
Siehe folgendes Beispiel:
[XML]
<root>
<sub>
<subsub>
<subsubsub>
</subsubsub>
</subsub>
</sub>
</root
[/XML]
Angenommen das Dokument ist sehr tief (mit vielen Subelementen) und sehr vielfältig (mit sehr vielen unterschiedlichen Elementtypen), wie bilde ich das am besten im Java ab um genau zu wissen wo ich bin?
Man könnte z.B. jedem Element in XML eine boolean variable zuweisen und diese dann bei Start des Tags/Events (welche mir der Parser liefert) auf true setzen (und bei End-Tag auf false).
also
root=true;
sub=true;
subsub=true;
usw.
dann könnten ich später jederzeit bestimmen wo ich im Dokument bin und darauf testen:
if (root&&sub&&subsub) {
//jetzt weiss ich das in an der richtigen Position bin und kann z.B. den Content auslesen und in einem passenden subsubDTO den Wert setzen
}
Das ist nur super uneffizient mit den booleans (da ich für jedes Element händisch eine Variable anlegen muss, gerade bei sehr tiefen Dokumente oder sehr vielen unterschiedlichen Elementtypen). Welche Best-Practices gibt es diese Struktur in Java abzubilden? Ggf. ist es mit einer Arraylist am einfchsten und direkt den Element-Namen als String reinspeichern? Testen ist dann leider nicht ganz so schön wie oben mit boolean aber ggf. könnte man dafür eine Methode schreiben die das erledigt...
Ihr XML Profis habt dafür aber bestimmt noch eine viel clevere Lösung. Wie macht Ihr das wenn ihr solche XML Strukturen in Java speichern müsst (um zu prüfen wo ihr im Dokument seid), was sind da gute Tipps oder gerne auch Beispiele (hab schon gegooglet aber so weit reichen die Beispeile immmer in Netz nicht, die loggen immer nur das eingelsene XML wieder direkt aus). (Oder gibts vielleicht eine Funktion die mir die genaue Position doch irgendwie liefert und auf die ich einfach testen kann?)
Vielen Dank!!
Tim
Zuletzt bearbeitet: