XML analysieren und einlesen

Bernd Hohmann

Top Contributor

Marco13

Top Contributor
[ot]
Grün? Ui! Ich bin erst bei Bernstein eingestiegen - den Titel "Alter Sack" trete ich freiwillig an Dich ab :bae:

;( Der PC war aber auch schon sehr alt, als ich ihn benutzt habe :pueh: ;)

[/ot]

EDITl, um vielleicht noch ein bißchen on-topic zu bleiben: Ich finde auch, dass XML "unbequem" ist. Mit XStream ist das Lesen ja vielleicht recht "kompakt" möglich (wenn auch nicht einfach), aber spätestens beim Schreiben wird's immer kramfpig. Ich habe bisher keine andere praktikable Möglichkeit zur XML-Verarbeitung gefunden, als manuell den DOM-Baum durchzulaufen und mit nodeName, nodeValue und viel geparse die Inhalte daraus zusammenzupflücken :noe: Aber (daran würde der vorgestellte Parser nichts ändern und) es ist eben ein Standard und eine der strukturiertesten, eindeutigsten Möglichkeiten, Objektorientierte Datenstrukturen standardisiert und Menschenlesbar in eine Datei zu bringen. CSV ist für Tabellendaten. Damit irgendeinen Objekt-Baum zu repräsentieren wäre ja unsinnig...
 
Zuletzt bearbeitet:

Bleiglanz

Gesperrter Benutzer
Etwas OT:

Das XML-Bashing ist doch Käse.

Die Rückkehr zu CSV ist eine Einladung zum alten Gehacke, wer kümmert sich schon um Escapes und die Frage, ob ein Eintrag in so einer CSV-Datei Strichpunkte und/oder Anführungszeichen enthält. Dazu kommt das Theater um die Codierung usw.

Zugegeben DTDs waren nicht wirklich leistungsfähig, aber wenn man gelernt hat wie ein Schema funktioiniert und dann mit JAXB den Boilerplate-Code generiert, da gibt es doch nichts zu meckern?

Große Dokumente kann man immer noch mit SAX durchackern, besser als das CSV (das nur auf den ersten Blick Vorteile hat) ist das allemal.

Das Problem dürfte eher sein, dass viele IT Senior Architekten zu blöd sind, korrektes XML zu erzeugen und mit System.out.println herumwursteln.
 

Marco13

Top Contributor
IT Senior Architekten - bashing ist auch Käse ;) Ich habe JAXB noch nicht in der Praxis verwendet. Der Grund dafür ist, dass nach dem, was ich bisher weiß und gelesen habe, es scheint als sei der Weg über JAXB erstmal NOCH (viel!) komplizierter und aufwändiger und würde zu mehr doppelten Strukturen führen, als wenn man seinen Kram per DOM zerpflückt. Zumindest finde ich Builder, Static Factory Methods und Immutable Classes besser als public Konstruktoren und Pojos/Beans, und falls ich das richtig verstanden habe, kommt man dann kaum drumherum, eine Programmatische Beschreibung des XML-Inhaltes zu erstellen, der dann DOCH wieder manuell auf die eigentlichen Programmstrukturen umgebogen werden muss. Aber mir das mal näher anzusehen steht schon auf der TODO Liste ... ;)
 

Bleiglanz

Gesperrter Benutzer
Zumindest finde ich Builder, Static Factory Methods und Immutable Classes besser als public Konstruktoren und Pojos/Beans, und falls ich das richtig verstanden habe, kommt man dann kaum drumherum, eine Programmatische Beschreibung des XML-Inhaltes zu erstellen, der dann DOCH wieder manuell auf die eigentlichen Programmstrukturen umgebogen werden muss.
Daran führt leider kein Weg vorbei, zumindest kenne ich keinen.

Ich will ja eigentlich mit dem XML gar nichts zu tun haben, das sollte vollkommen transparent für mich sein. Brauchen tut man das ja eh nur an Schnittstellen beim Lesen/Schreiben - und oft gibt es dafür fertige Schemas die man direkt in JAXB hineinfüttern kann. Wenn nicht muss sich eins selbst schreiben (eine (!) Datei) und lässt dann JAXB drüberlaufen als Teil des builds. Dann kann man wenigstens mit den Daten arbeiten und kriegt vom eigentlichen "parsing" nichts mehr mit. Dafür nehme ich das erzeugte Java "as is" in Kauf
 

Marco13

Top Contributor
Ich dachte einen Moment lang, dass XStream interessant sein könnte: Das schreibt und liest beliebige Objekte als XML - ohne Schemadefinition, ohne manuelles parsen, alles automatisch. Für manche Zwecke ist das natürlich sau-cool. Aber für "Langzeitpersistenz"... ???:L ich weiß nicht: Natürlich stehen dann da im XML irgendwelche Klassennamen der Instanzen, von denen die Objekte eben waren. Nichts mehr mit Interfaces und versteckten Implmenentierungen :bahnhof:


@TheCreeper202/Mods: Das hier driftet(e) ja schon weit vom eigentlichen XML-Parser ab (auch wenn es immernoch um XML geht). Vielleicht könnte man überlegen, den Teil seit gestern 21:04 oder Heute 10:29 abzuzwacken, falls TheCreeper202 das wünscht.
 
P

pL4Gu333

Gast
und oft gibt es dafür fertige Schemas die man direkt in JAXB hineinfüttern kann. Wenn nicht muss sich eins selbst schreiben (eine (!) Datei) und lässt dann JAXB drüberlaufen als Teil des builds. Dann kann man wenigstens mit den Daten arbeiten und kriegt vom eigentlichen "parsing" nichts mehr mit. Dafür nehme ich das erzeugte Java "as is" in Kauf

[OT]Ich benutze JAXB erst seit kurzem und finde es auch sehr einfach, besonders wenn man sich von XJC die JAVA Klassen per Schema erstellen lässt. Kacke wirds erst, wenn die XML- Dateien zu groß werden, um sie direkt einlesen zu können (z.b. im GB- Bereich). Da hab ich dann mit Stax gearbeitet und jeweils kleinere Teile mit JAXB eingelesen um nicht alles verarbeiten zu müssen (Wenn wer Alternativen hat immer her damit :D). Aber irgendwie gefällt mir das noch nicht wirklich :D . Für kleinere XML finde JAXB aber ganz gut, außer die Annotation Flut :D aber die hat man ja fast überall[/OT]
 

Marco13

Top Contributor
Nachdem das jetzt ohnehin ein eigener Thread ist, vielleicht mal die Frage an JAXB-Fans: Sehe ich es richtig, dass es in der Praxis nicht direkt vorgesehen (und insbesondere nicht sinnvoll) ist, JAXB bzw. die automatisch generierten Klassen für etwas anderes zu verwenden, als daraus seine eigentlichen Modellklassen zu bauen? Stimmt es also, dass diese Klassen NUR eine programmatische Repräsentation des XML sind? Die ganzen Strukturen, die durch das Schema und dessen Verarbeitung entstehen, und insbesondere die Annotations WILL (und kann?) man ja nicht in seinen mühevoll minimalistisch-sauber entworfenen Modellklassen haben (die ja sowieso nur Modell-Interfaces sind, und man für das Mapping dann irgendwelche Manuellen Handler schreiben müßte) ...?
 
P

pL4Gu333

Gast
Also wie gesagt ich beschäftige mich noch net sehr lang damit, hatte zu dem Thema diesen Post hier gefunden/gelesen :

Do Domain Classes usually get JPA or JAXB Annotations or both? - Stack Overflow

Es soll wohl keine Probleme damit geben wenn man 1 Model dafür verwendet bloß gibt das auf jeden Fall Annotation Chaos :D

Ich benutze atm auch 2 verschiedene Models... also für JAXB wirklich nur eine Objekt- Repräsentierung des XML. Dazwischen muss dann wieder ein Konverter existieren, was mich auch etwas ankotzt :D
 

Marco13

Top Contributor
Kleine Zwischenfrage: Wie stellt man ein, dass das, was von JAXB generiert wird (Kommentare) auf Englisch sind und nicht auf Deutsch?

( :autsch: Da war ja jemand """ganz schlau""" und hat sich """ganz viel Mühe gegeben""" :autsch: Und... warum zum :autsch: findet man dazu nichts (aber wirklich gleich GAR nichts :noe: im Web?!)
 

pl4gu33

Top Contributor
( :autsch: Da war ja jemand """ganz schlau""" und hat sich """ganz viel Mühe gegeben""" :autsch: Und... warum zum :autsch: findet man dazu nichts (aber wirklich gleich GAR nichts :noe: im Web?!)

Ist der Abschnitt auch auf die Sprache der Kommentare bezogen ? :D
Also ich find auch mal gar nix dazu :D ... aber ich schau morgen früh nochmal nach.
 

Bernd Hohmann

Top Contributor
Das Problem dürfte eher sein, dass viele IT Senior Architekten zu blöd sind, korrektes XML zu erzeugen und mit System.out.println herumwursteln.

Das hab ich jetzt nicht verstanden: Bislang dachte ich, dass die XML Tools dafür sorgen dass korrektes XML erzeugt wird.

Was den "blöden IT Senior Architekt angeht": in 20 Jahren gibts was (angeblich) viel besseres als XML und dann darfst Du dir die dummen Sprüche der Kiddies hier anhören warum Du noch an diesem altertümlichen Format klebst.

Bernd

PS: Mir ist das Wurscht in welchem Format die Daten ankommen - am liebsten aber so, dass ich nur 1 Stunde Arbeiten aber 1 Manntag fakturieren kann und da ist CSV bei dem üblichem Datenkram hier einfach unschlagbar :toll:
 

Marco13

Top Contributor
Ist der Abschnitt auch auf die Sprache der Kommentare bezogen ? :D

Jupp, der generiert halt so 'nen Dreck wie
Java:
   /**
     * Legt den Wert der links-Eigenschaft fest.
     * 
     * @param value
     *     allowed object is
     *     {@link LinksType }
     *     
     */
    public void setLinks(LinksType value) {
        this.links = value;
    }
aber zwischendrin sind auch einige Teile auf Englisch :autsch:

@Bernd Hohmann: Ich glaube, dazu ist es zu spät. XML ist zu verbreitet, als dass es noch ersetzt werden könnte. Faktisch ist es ja auch so, dass man eine Hierarchische Information kaum anders beschreiben kann (ggf. etwas weniger "verbose" aber dafür mit mehr Sonderzeichen, aber rein konzeptuell). Das ändert aber nichts daran, dass es mit heutigen Mitteln IMHO aufwändig zu verarbeiten ist, und das leichter sein sollte.
 

Bernd Hohmann

Top Contributor
@Bernd Hohmann: Ich glaube, dazu ist es zu spät. XML ist zu verbreitet, als dass es noch ersetzt werden könnte.

Ich habe in die Zukunft gedacht. Wenn wir beide in Rente gehen ist Bleiglanz dort, wo wir heute sind. Und in der Zwischenzeit wird irgendeine durchs Dorf getriebene Sau tatsächlich die Ziellinie erreichen und die Nachfolge von XML antreten.

Faktisch ist es ja auch so, dass man eine Hierarchische Information kaum anders beschreiben kann (ggf. etwas weniger "verbose" aber dafür mit mehr Sonderzeichen, aber rein konzeptuell). Das ändert aber nichts daran, dass es mit heutigen Mitteln IMHO aufwändig zu verarbeiten ist, und das leichter sein sollte.

Ich habe hier recht selten hierarchische Informationen. Oder besser gesagt: sollte das vorliegen, wirds einfach mit dem dickem Hammer platt geklopft. Habe es hier überwiegend mit Tabellendaten zu tun (also Export von Reports, Import von irgendwelchen Artikellisten, EDI). Das ist entweder CSV (wird dann letztendlich irgendwo in einem Excel-Template ausgewertet) oder sowas wie SEDAS, DTA und Konsorten mit eigenem (Binär)Format wo Datenknauserei angesagt ist.

Natürlich gibt es immer mal Versuche XML einzuführen (insbesondere wenn die IT-Abteilung wieder Frischfleisch eingekauft hat), da es bei bestehenden Datenstrukturen aber nur Kosten und kaum Nutzen bringt fällt das ganz schnell wieder unter den Tisch.

Es gibt paar Anwendungsfälle, wo hier XML tatsächlich zum Einsatz kommt und auch einen Vorteil bietet - aber das liegt eher im Promillebereich.

Bernd
 

Noctarius

Top Contributor
Jupp, der generiert halt so 'nen Dreck wie
Java:
   /**
     * Legt den Wert der links-Eigenschaft fest.
     * 
     * @param value
     *     allowed object is
     *     {@link LinksType }
     *     
     */
    public void setLinks(LinksType value) {
        this.links = value;
    }
aber zwischendrin sind auch einige Teile auf Englisch :autsch:

Sicher, dass die nicht schon im XSD stehen?
 
P

pL4Gu333

Gast
also ich hab nun nochmal bei mir geschaut,.... bei mir sind alle Kommentare etc. auf Englisch
 

Bleiglanz

Gesperrter Benutzer
Wenn Ihr in Rente geht bin ich schon in der Grube :)

CSV ist eine Krankheit und funktioniert genau so lange, bis es eben abstürzt. Ich kann mit Leuten, die mir sagen, dass das Daten einlesen "jetzt funktioniert", aber nicht berücksichtigt haben, was passiert, wenn Daten mit Strichpunkten und/oder Anführungszeichen daherkommen nichts anfangen. Es funktioniert halt wenn die Daten so sind "wie bisher" und "so wie die Beispieldaten", was in der Praxis vier Monate später zum Problem wird.

XML ist sicher nicht das Ende aller Formate, aber zumindest hat man eine gewisse Kontrolle und Robustheit (das ist viel wichtiger als alles andere). Daten zeilenweise einlesen, mit String.split(";") auftrennen kann man machen, wenn es schnell gehen muss und eine einmalige Sache ist. Ansonsten ein no go.

OT: Ich verarbeite gerade eine Excel Datei mit 10000 Zeilen, die eine numerische Spalte hat. Die ersten 2000 Zeilen sind wirklich Zahlen, dann hat jemand "8/8/8" eingetragen! Zieht man das Ding mit dem Jet-ODBC Treiber in eine SQL-Datenbank, dann erscheint statt "8/8/8" die Zahl 4 (Grund: Datum-Zahl-Formattier-Wahnsinn). Ich hasse sowas.
 

Marco13

Top Contributor
@Bernd Hohmann: Wie schon weiter oben gesagt: CSV ist für Tabellendaten, und zu versuchen, so etwas in XML zu pressen, ist mindestens genauso albern, wie zu versuchen, eine Objekthierarchie in CSV darzustellen (außer wenn es "viele" Objekte sind, und man damit quasi eine "Structure of Arrays" repräsentieren will, aber das ist ein Sonderfall).

@Noctarius/pL4Gu333: In der XSD stehen keine Kommentare... und irgendwas spezielles eingestellt habe ich auch nicht. Wie gesagt: In einigen Dateien stehen auch (nur) Englische Kommentare, aber zwischendrin diese Halb-Deutschen Brocken...
 
G

gasssssssst

Gast
Hi,

Große Dokumente kann man immer noch mit SAX durchackern, besser als das CSV (das nur auf den ersten Blick Vorteile hat) ist das allemal.
Nicht wirklich: das wahre Problem liegt darin, dass ich XML nämlich nicht mal ohne Umstände parallel verarbeiten kann. CSV (oder noch besser TSV) kann ich einfach alle paar 1000 Zeilen splitten und dann auf meine Nodes verteilen. XML? Kaum eine Chance, es sei denn ich gehe die Datei irgendwie manuell durch und splitte das Dokument bei bestimmten Tags. Wenn ich ganz bescheuert bin bastel ich mir aus den Einzelteilen dann wieder ein neues Dokument von jeweils n XML Nodes auf und verteil die dann wieder auf die Maschinen. In der Zeit hab ich TSV Datei 3mal durchgearbeitet.

CSV ist eine Krankheit und funktioniert genau so lange, bis es eben abstürzt. Ich kann mit Leuten, die mir sagen, dass das Daten einlesen "jetzt funktioniert", aber nicht berücksichtigt haben, was passiert, wenn Daten mit Strichpunkten und/oder Anführungszeichen daherkommen nichts anfangen. Es funktioniert halt wenn die Daten so sind "wie bisher" und "so wie die Beispieldaten", was in der Praxis vier Monate später zum Problem wird.

Das Argument ist Unsinn, wenn ich CSV verarbeite benutze ich einen CSV Parser, genauso wie ich für XML einen XML Parser benutze und mir die Daten nicht mit substring() oder split() raushole, damit ist das Problem schon erledigt. Oder ich bin schlau und benutze direkt TSV und brauche mich um sowas gar nicht mehr zu kümmern.

Es ist kein Wunder, dass für große Daten inzwischen wieder TSV oder CSV Standard für den Datenaustausch/-verarbeitung sind.
 

Marco13

Top Contributor
Bin ich der einzige, der findet, dass der Vergleich zwischen XML und CSV NOCH unpassender ist, als der zu Unrecht als unpassend verschrieene Vergleich zwischen Äpfeln und Birnen? Ja, beides sind Dateiformate (bzw. Obst), aber ... XML verwendet man für hierarchische Daten, und CSV für tabellarische Daten. Jeweils das andere ist für die jeweils anderen Daten natürlich Bockmist :noe: :bahnhof:
 

Bernd Hohmann

Top Contributor
Bin ich der einzige, der findet, dass der Vergleich zwischen XML und CSV NOCH unpassender ist, als der zu Unrecht als unpassend verschrieene Vergleich zwischen Äpfeln und Birnen? Ja, beides sind Dateiformate (bzw. Obst), aber ... XML verwendet man für hierarchische Daten, und CSV für tabellarische Daten. Jeweils das andere ist für die jeweils anderen Daten natürlich Bockmist :noe: :bahnhof:

Du siehst das schon richtig.

Mein persönliches Problem besteht darin, dass XML an Stellen eingesetzt wird wo es überhaupt nichts zu suchen hat und nur Nachteile bringt (Ersatz für .ini-Dateien, Massenauslagerung von pseudohierarchischichen Daten). Und dass XML den Finger auf Probleme zeigt, die eher nicht vorhanden sind.

Ordentlich eingesetzt hab ich mit XML überhaupt keine Probleme - rein in den Parser und gut ist. Wenn der Import dann aber 2 Stunden statt 2 Minuten dauert werde ich mäkelig :)

Vielleicht sollte man mal ein RFC 4711 "XSV" schreiben - eine Mischung aus XML und CSV. Vorne eine XML-Beschreibung der Felder und dann Zeilenweise den Datenschrott wegkloppen.

Bernd
 

Marco13

Top Contributor
Ja, wie heißt es so schön?
Java is a DSL for converting large XML files into Stack Traces
( Java Language ) :D

Insbesondere der letzte Punkt ist aber recht wichtig: So eine CSV ist ziemlich "nackt". Manchmal hat man nichtmal Spaltennamen, und z.B. den Datentyp einer Spalte festlegen ist nicht möglich - von Wertebereichen und "Missing Value"-Indikatoren ganz zu schweigen. Den Use-Case, eine CSV mit Daten zu haben, und zusätzlich eine XML, wo drinsteht, was in der CSV drinsteht, ist gar nicht unrealistisch.
 

Nametat

Mitglied
Hey,

ich "wühle" jetzt mal in den Tiefen des Forums und wollte eig. nur wissen, ob eine Möglichkeit gefunden wurde, die Kommentare, die von JAXB automatisch generiert werden, entweder zu löschen oder auf Englisch zu stellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S XML einlesen, analysieren, bearbeiten & als Textdatei ausgeben XML & JSON 1
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
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
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
M Liste in Baumstruktur einlesen XML & JSON 4
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