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:
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
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