Java XMLStreamReader/-Writer

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Java XMLStreamReader/-Writer

Beitrag von RedGuy »

Hallo !

Für mein aktuelles Projekt (3d-Engine; in JAVA) schreibe für die Map Testweise ein XML-Dokument auf Festplatte.
Natürlich wird das XML riesig groß (ca. 100MB). Dafür hab ich sogar auf den XMLStreamReader/-writer umstellen müssen.

Irgendwas funktioniert trotzdem nicht richtig. Beim 3/4stem Einlesen kommt immer eine seltsame Exception nach dem Ausführen von Next() :
Ein Attribut soll falsch geschrieben sein (stimmt aber nicht- hab's überprüft !!!).

Ich denke mir da 2 potentielle Fehlerquellen:
1. das XML - Dokument ist auch für den XMLStreamReader zu groß.
2. beim XML well-formed document spielt die Einrückung eine Rolle (weil ich nämlich aus Platzgründen nicht einrücke...)

Als Beispiel hier ein Auszug vom XML:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<Koerper>
[...]
<T0><Cl R="0" G="29" B="95"></Cl><lcl x="0.0" y="0.0" z="1.0"></lcl><nTD>0</nTD><TD></TD></T0><T1><Cl R="1" G="30" B="96"></Cl><lcl x="0.7970216187736385" y="0.7970216187736385" z="1.0"></lcl><nTD>0</nTD><TD></TD></T1>
[...]
</Koerper>
Könnte Ihr mir da weiterhelfen ?

Gruss
RedGuy
Zuletzt geändert von RedGuy am 10.08.2015, 17:31, insgesamt 1-mal geändert.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Java XMLStreamReader

Beitrag von Schrompf »

Welche Exception? Und da dürfte auch ne Zeilennummer drinstehen. Wie sehen die Zeilen an der Stelle aus? Denn die Hypothese "Datei zu groß" glaube ich nicht recht. Da müsste die Exception ja ein "Out of Memory" oder sowas sein. Und das dürfte nur auf 32Bit-Ausführung bei wirklich großen Dateien kommen, aber doch nicht schon bei 100 MB.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Sternmull
Establishment
Beiträge: 264
Registriert: 27.04.2007, 00:30
Echter Name: Til
Wohnort: Dresden

Re: Java XMLStreamReader

Beitrag von Sternmull »

RedGuy hat geschrieben: ... in JAVA...

Irgendwas funktioniert trotzdem nicht richtig.
Du meinst wohl irgendwas funktioniert deswegen nicht richtig... muhaha. Sorry, bin grad im Urlaubsmodus und mir steht grad der Sinn danach über Java zu lästern.

Aber im Ernst: Warum muss es denn ausgerechnet Java sein? Spätestens der Garbage Collector macht doch jeder Anwendung die halbwegs in die Richtung Echtzeit geht einen Strich durch die Rechnung. Java Anwendungen sind auch allgemein nicht grad für ihre Performance berühmt. Ich denke an Netbeans und Eclipse, und die waren vor 10 Jahren lahm und sind auch heute noch spürbare Ressourcenfresser. Ich weiß das Minecraft in Java implementiert ist. Aber das haben sie für die mobilen Geräte auch in C++ neu implementieren müssen. Deshalb verstehe ich nicht warum man damit eine 3D-Engine implementieren sollte. Aber ich bin zugegebenermaßen etwas negativ vorbelastet was die Sprache und die JVMs angeht.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: Java XMLStreamReader

Beitrag von RedGuy »

Hallo zusammen!

Also zunächst einmal die Exception:

Code: Alles auswählen

pException = (javax.xml.stream.XMLStreamException) javax.xml.stream.XMLStreamException: ParseError at [row,col]:[45,2670033]
Message: Attribute name "z" associated with an element type "lcl" must be followed by the ' = ' character.
Nachtrag: Die Exception kommt schon bei .hasNext() !!!


das XML sieht an der Stelle folgendermaßen aus:

Code: Alles auswählen

<T25594><Cl R="102" G="191" B="195"></Cl><lcl x="178.54130195226577" y="414.93465986398223" z="1.0"></lcl><nTD>0</nTD><TD></TD></T25594>
wie schon erwähnt stimmt die Exception so nicht.

Eine Anmerkung noch:
Ich setze eigentlich keine Zeilenumbrüche rein. Das ganze XML steht somit quasi in
einer Zeile. Könnte das was ausmachen ?


@Sternmull:

Zur Zeit bin ich auf der Linux und Java Schiene, weil ich das als
Alternative zur Microsoft - Konkurrenz ausprobiere.


Gruss
RedGuy
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: Java XMLStreamReader

Beitrag von RedGuy »

Nachtrag:

ich hab beim letzten Post die falsche XML - Stelle geschrieben (scheinbar gibt es da Redundanzen) - sorry :oops: .

ich weiß jetzt warum die Exception kommt. Das XML, welches vom XmlStreamWriter geschrieben wird sieht nach ca. 14000 Textseiten an XML so aus:

Code: Alles auswählen

<T19398><Cl R="102" G="191" B="195"></Cl><lcl x="522.0703033250566" y="371.0791828480263" z########################################################################################################################################################################################################
ALSO ICH MEINE DIE RAUTE!

Ergänzung:
nach lauter Rauten geht es nach Seite 16248 so weiter:

Code: Alles auswählen

#######################################################################################################################################################################################################################################################################################################################################102" G="165" B="170"></Cl><lcl x="552.7083832560415" y="448.4454708138559" z="1.0"></lcl>
Aus welchem Grund tritt denn das mit der Raute auf ?

Gruss

RedGuy
Zuletzt geändert von RedGuy am 10.08.2015, 17:25, insgesamt 4-mal geändert.
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Java XMLStreamReader

Beitrag von Spiele Programmierer »

XML benötigt eigentlich keine Zeilenumbrüche.
Du kannst übrigens "<Cl R="102" G="191" B="195"></Cl>" auch als "<Cl R="102" G="191" B="195"/>" speichern.

Gerade wenn es um große Daten geht ist Java tatsächlich extrem ineffizient. Objekte haben sehr großen Verwaltungsoverhead und der Garbage Collector benötigen wohl zusätzlich um die 5fache Menge allokierten Speicher als tatsächlich gefüllt sind. Für C++ gibt es super schnelle Dom-Parser die mit wenig Speicher klarkommen. PugiXML zum Beispiel. C++ hat übrigens nichts mit Microsoft zu tun. Tatsächlich hat sich Microsoft historisch immer sehr schwer getan, sich an den C++ Standard zu halten.
Alexander Kornrumpf
Moderator
Beiträge: 2112
Registriert: 25.02.2009, 13:37

Re: Java XMLStreamReader

Beitrag von Alexander Kornrumpf »

Vielleicht hilft es, mal einen Schritt zurückzutreten und zu überlegen, was dein erster Gedanke wäre, wenn jemand anderes dir einen Fehler beschriebe, der auf den Seiten(!) 14.000 - 16.000 (!!!) einer XML Datei auftritt.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: Java XMLStreamReader/-Writer

Beitrag von RedGuy »

Hallo !

@Alexander Kornrumpf

ich verstehe nicht ganz, was Du meinst. Soll ich erst gar kein XML verwenden, hab ich das richtig verstanden?

Vielleicht hatte ich mich nicht eindeutig genug ausgedrückt. Die betroffenen Stellen müssten eindeutig erkennbar sein.
Ich meinte, warum die Sache mit der Raute auftritt ...

Gruss
Red
Alexander Kornrumpf
Moderator
Beiträge: 2112
Registriert: 25.02.2009, 13:37

Re: Java XMLStreamReader/-Writer

Beitrag von Alexander Kornrumpf »

RedGuy hat geschrieben:Hallo !

@Alexander Kornrumpf

ich verstehe nicht ganz, was Du meinst. Soll ich erst gar kein XML verwenden, hab ich das richtig verstanden?

Vielleicht hatte ich mich nicht eindeutig genug ausgedrückt. Die betroffenen Stellen müssten eindeutig erkennbar sein.
Ich meinte, warum die Sache mit der Raute auftritt ...

Gruss
Red

Ich denke du muss unterscheiden zwischen erstens dem ursprünglichen Problem, was immer es war, für dass XML tatsächlich nicht nach einer idealen Lösung klingt, wenn _das_ dabei rauskommt, und zweitens dem Ehrgeiz rauszufinden, was konkret schief geht. Wenn es dir um Fortschritt bezüglich ersterem geht, würde ich auf XML pfeifen und meine Daten in den Griff bekommen. Wenn es um zweiteres geht würde ich versuchen, das Problem an einem wesentlich kleineren Beispiel zu rekonstruieren.
NytroX
Establishment
Beiträge: 362
Registriert: 03.10.2003, 12:47

Re: Java XMLStreamReader/-Writer

Beitrag von NytroX »

Also ehrlich gesagt blicke ich jetzt nicht mehr durch, was genau du da machst :D
Also wo ist jetzt genau der Fehler, beim Writer oder beim Reader?

Die Meldung vom Reader sieht logisch aus, bei dem was du als Input gepostest hast.
Bist du sicher, dass das Zeug, was in dem Stream steht, den du in den XmlStreamWrite ballerst, überhaupt valides XML ist?

Oracle sagt:
The XMLStreamWriter does not perform well formedness checking on its input.
Also der Writer schreibt einfach irgendwas drauf los, wenn im Stream was unbrauchbares steht; er escaped hauptsächlich die entsprechenden Zeichen im XML und in Attribut-Strings.
Und evtl. kriegt das der Reader dann natürlich nicht mehr gelesen.

Versuche doch nochmal herauszufinden, ob der Input überhaupt so passt.
RedGuy
Establishment
Beiträge: 111
Registriert: 17.09.2002, 17:27
Echter Name: Manuel Hofmann
Wohnort: Rottweil
Kontaktdaten:

Re: Java XMLStreamReader/-Writer

Beitrag von RedGuy »

Hallo zusammen!

Danke für die Antworten!!!

Also ich hab die Fehlerquelle auch entdeckt ;) !

Das mit den vielen Rauten ist passiert und das XML war korrupt, da ich beim Schreiben des XMLs über XmlStreamWriter
die Methode .writeEndElement() falsch eingesetzt habe. Aus irgendeinem Grund hat sich das so in der Masse mit den vielen Rauten geäußert :mrgreen:.


Gruss
RedGuy
Antworten