Probleme beim Parsen eines gefilterten XML-Dokuments

megalomaniac

Mitglied
Hallo zusammen,

ich verzweifle gerade ein klein wenig und hoffe auf gedankliche Unterstützung.

Die Situation:
Ich betreibe ein Programm, dass den Inhalt von XML-Dateien weiterverarbeitet. Die XML-Dateien werden in Form eines InputStreams an den Parser (SAX und DOM einsetzbar) übergeben. Da ich mich aber nicht darauf verlassen kann, dass die XML-Dateien well-formed sind, habe ich einen FilterInputStream (XmlFilterInputStream.java) dazwischengeschaltet, der den Inhalt nach bestimmten Regeln umsetzt, z.B. & -> &. Das funktioniert prinzipiell auch problemlos, d.h. der Filter setzt die Zeichen genau so um, wie sie umgesetzt werden sollen.

Allerdings - und das ist mein eigentliches Problem - scheint der Parser den Inhalt nicht Zeichen für Zeichen durchzugehen, sondern hin und wieder ÜBERSPRINGT er bestimmte Zeichen einfach, indem er nicht die Methoden read() bzw. read(byte[]), sondern read(byte[], int, int) mit gesetztem offset aufruft, was dazu führt, dass bestimmte Zeichen einfach ignoriert werden. Mir ist nicht klar warum er das tut, die Folge davon ist jedenfalls, dass das Format der XML-Datei zerstört wird (z.B. weil öffnendes und schließendes Tag nicht mehr zueinander passen). Das passiert nicht bei jeder Datei, nur bei einigen wenigen, aber eine stichhaltige Regelmäßigkeit konnte ich dabei bisher nicht entdecken.

Der Quelltext sieht in etwa so aus:
Java:
// Gegeben: InputStream is
XmlFilterInputStream filterStream = new XmlFilterInputStream(is);
InputSource inSource = new InputSource(filterStream);
inSource.setEncoding("UTF-8");
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
w3cDocument = builder.parse(inSource);

Die Dateien liegen im UTF-8-Format vor. Ich muss das Format explizit im InputSource-Objekt setzen, da ich sonst immer folgende Exception vom Parser bekomme:
JDomInitialisationException: Problem while parsing: Document root element is missing.!

Hat jemand eine Idee, was die Ursache für mein Problem sein könnte? Ich hoffe ich habe die Situation verständlich erklären können.

Danke und Gruß,
megalomaniac
 

Noctarius

Top Contributor
Wenn ich mich recht erinnere nutzt der Sax Parser intern einen Reader und keinen InputStream. Vielleicht bringt dich das auf die richtige Spur.
 

megalomaniac

Mitglied
Danke für die Antwort, aber leider hilft mir das nicht weiter...

Ich habe allerdings herausgefunden, dass es irgendetwas mit der UTF-8-Codierung zu tun haben muss. Es gibt im Großen und Ganzen zwei verschiedene Arten von XML-Dateien, die einen sind in UTF-8 codiert, die anderen in ISO-8859-1. Zumindest steht das so im XML-Header der Datei. Die Information wird vom Programm ausgelesen und die Codierung entsprechend im DataSource-Objekt gesetzt.

Ergänzung zum oben genannten Code also:
Java:
inSource.setEncoding(filterStream.getEncoding());

Das oben beschriebene Problem beim Parsen tritt offenbar nur bei den Dateien auf, die in UTF-8 codiert sind. Vielleicht BEHAUPTET das XML-File nur in UTF-8 codiert zu sein, ist aber eigentlich ein ganz normales ANSI-XML. Mal prüfen...
 

megalomaniac

Mitglied
Ich habe aus meinen XmlFilterInputStream jetzt Reader gemacht (abgeleitet von InputStreamReader), was das vorherige Problem beseitigt hat. Jetzt habe ich allerdings ein anderes:

Java:
jdomDocument = saxBuilder.build(new XmlFilterInputStreamReader(is));

Und zwar übergebe ich dem Reader die XML-Datei in Form eines InputStreams (is). Wie oben schon erwähnt können die XML-Dateien in den Formaten UTF-8 und ISO-8859-1 vorliegen. Mit Sicherheit bestimmen kann ich das nur durch das Auslesen des XML-Headers, wo das Encoding definiert wird.

An dieser Stelle bekomme ich jetzt ein Henne-Ei-Problem, weil ich das Encoding im Konstruktor der Superklasse InputStreamReader setzen muss (ein nachträgliches Setzen des Encodings ist offenbar nicht möglich), ich den Reader aber erstmal instanziiert haben muss, um überhaupt auf den Inhalt des InputStreams zugreifen zu können.

Ich möchte unbedingt vermeiden den InputStream wegen dem zu ermittelnden Encoding erst "anlesen" zu müssen, um ihn anschließend wegzuwerfen und neu zu holen. Jemand eine Idee wie man das eleganter hinbekommen könnte?
 

megalomaniac

Mitglied
Hmm, keine so Gute Idee.

Das Problem ist, dass die XML-Dateien mitunter sehr groß sein können (> 200 MB) und von dem Programm im Normalfall viele Tausend solcher Dateien sequentiell durchlaufen werden. Ein eklatanter Verlust an Durchsatzperformanz wäre die Folge eines solchen Trial-and-Error-Verfahrens...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Probleme beim html parsen mit tagsoup XML & JSON 4
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
L Jackson JSON: Probleme beim einlesen XML & JSON 1
hdi Probleme beim Erstellen einer XML XML & JSON 7
H JAXB Probleme beim Unmarshalling XML & JSON 3
S Probleme beim erstellen einer Jar XML & JSON 12
C SAX Probleme beim lesen XML & JSON 4
D Probleme beim SAX parsing XML & JSON 4
R JAVA und DOM, probleme beim einfügen von elementen ?????? XML & JSON 6
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
G Probleme mit Jsoup in .jar File XML & JSON 11
K JAX-WS Bindin-Probleme XML & JSON 1
B Probleme mit RelativeLayout XML & JSON 1
K XOM Builder Probleme XML & JSON 3
N Jsoup: PHP-Tags bereiten Probleme? XML & JSON 2
M SAX-Parsing Probleme XML & JSON 23
M Probleme mit XPath bei Java XML & JSON 5
G Probleme mit XML und JTree XML & JSON 9
klattiator Probleme mit Codierung XML & JSON 3
T XML und Sonderzeichen, Probleme mit ASP.NET Server XML & JSON 2
G Probleme mit Namespaces XML & JSON 5
D Probleme mit Eclipse Modeling Framework (EMF) XML & JSON 2
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
F JAXB - Nachträglich hinzugefügter Code macht Probleme XML & JSON 2
P Probleme mit JDom . addContent(int index,Collection c) XML & JSON 2
F Unmarshall Probleme XML & JSON 5
R Probleme mit Transformer und StreamResult XML & JSON 4
C Probleme mit Include XML & JSON 10
C POI + jXLS Probleme XML & JSON 3
B DOM DTD laden abschalten, Probleme mit Doctypes und PIs XML & JSON 2
S Probleme mit Jdom XML & JSON 3
G probleme mit package XML & JSON 12
M Probleme mit String XML & JSON 3
H Probleme mit xmlrpc und php XML & JSON 13
B Probleme mit Zugriff auf eXist-Datenbank XML & JSON 9
H Neu bei JAVA- Probleme mit der Integration von Xerces XML & JSON 3
P Probleme mit jdom XML & JSON 5
S Hilfe beim RDF-Graphen XML & JSON 0
R Beim Serialisieren fehlt die letzte Zeile XML & JSON 5
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
A XML-Fehler beim Prefix von xmlns XML & JSON 2
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
G Langsam beim SAX-Parsen - woran liegts? XML & JSON 2
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
B Validierung nur beim einlesen oder auch beim schreiben? XML & JSON 4
D JAXBException beim Marshaller XML & JSON 4
M Read / write Problem beim ByteStrom XML & JSON 2
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
J Dateinamen beim Start auslesen XML & JSON 8
F Hilfe beim bearbeiten von XML elemente XML & JSON 3
N XStream ConversionException beim Deserialisieren in (Hibernate)Objekt XML & JSON 6
G Problem beim schreiben von XML in eine File XML & JSON 2
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
sylo Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen? XML & JSON 11
B Problem beim löschen von ChildNodes aus einem XML-DOM XML & JSON 3
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
N Hilfe beim Einstieg in EMF XML & JSON 6
D Das Programm hängt etwa 5 Sekunden beim Aufruf der parse-Methode XML & JSON 6
D Tabs/Einrückungen der XML-Elemente gehen beim Schreiben verloren XML & JSON 5
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
G XML Tag beim Einlesen manipulieren XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
N jdom problem beim lesen von child elementen XML & JSON 5
P NullPointerException beim Auslesen XML & JSON 8
M Performance beim Binding XML & JSON 2
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
J Fehler beim laden einer .xml XML & JSON 3
G DOCTYPE Problem beim Transformer/TransformerFactory etc. XML & JSON 13
P OutOfMemoryError beim Einlesen einer XML-Datei XML & JSON 7
P Problem beim erstellen eines neuen Elements (JDOM) XML & JSON 5
S JDOM-Kein indent beim XMLOutputter XML & JSON 4
C Zeile herausfinden in der ein Fehler beim Einlesen entsteht XML & JSON 3
V Datenverlust nach sortieren (nur beim serialisieren) XML & JSON 4
S Problem beim Erstellen eines pdfs XML & JSON 3
R Problem beim Auslesen von Attributen XML & JSON 4
M Buch Metadaten aus XML Datei parsen XML & JSON 48
S XML Document Parsen und Ausgeben mit Suchfunktion XML & JSON 21
M parsen von realen HTML-WEB-Seiten XML & JSON 1
M parsen mit regex -> ein schnelles Ende XML & JSON 10
F Parsen von Daten aus einer Homepage XML & JSON 6
C Parsen des XML-Streams mit SAX XML & JSON 3
M XML Datei Parsen XML & JSON 4
D SAX parsen - Wie? XML & JSON 11
S XML Parsen und Werte zwischenspeichern XML & JSON 2
K Kurze XML Datei Parsen XML & JSON 5
J Comments in XML parsen XML & JSON 3
H Nicht wohlgeformtes XML mit SAX parsen XML & JSON 2
M XML Parsen JDOM NullPointerEcxeption XML & JSON 7
Z XML parsen - Element mit Werten XML & JSON 2
ruutaiokwu xml nur bis auf eine bestimmte ebene parsen mit javax.xml... XML & JSON 5
L [SAX] Geschachtelte XML Datei parsen XML & JSON 3
R XML in UTF-8 mit SAX parsen XML & JSON 9
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
Semox Kann JUnit XML Parsen? XML & JSON 2
L xml Datei parsen ohne End-Tag XML & JSON 6
T RSS-Feed parsen und in Datenbank speichern XML & JSON 6
B XML parsen XML & JSON 3
H XML parsen und unbekannten Namespace zurückgeben XML & JSON 5
L invalide xml document parsen?! XML & JSON 2

Ähnliche Java Themen


Oben