2010-03-23 18 views
7

Zunächst, lassen Sie mich sagen, ich bin ein Neuling in SAX und Java.Das Markup muss wohlgeformt sein

Ich versuche, Informationen aus einer XML-Datei zu lesen, die nicht gut ausgebildet ist.

Wenn ich versuche, die SAX oder DOM Parser ich folgende Fehlermeldung in Antwort erhalten zu verwenden:

The markup in the document following the root element must be well-formed. 

Dies ist, wie ich meine XML-Datei:

<format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
<format type="driver" t="123412">001;023</format> 
    ... 

Kann ich die Kraft SAX oder DOM, um XML-Dateien zu analysieren, selbst wenn sie nicht gut formatiert sind?

Vielen Dank für Ihre Hilfe. Sehr geschätzt. Haythem

+2

FYI: Per Definition ... Wenn es nicht gut geformt ist, ist es ** nicht ** XML. http://en.wikipedia.org/wiki/XML#Well-formnessness_and_error-handling –

Antwort

18

Ihre beste Wette ist es, das XML wohlgeformt zu machen, wahrscheinlich indem Sie es ein wenig vorverarbeiten. In diesem Fall können Sie das einfach, indem eine XML-Deklaration (und auch das ist optional) und Bereitstellen eines Wurzelelement erreichen (das ist nicht optional), wie folgt aus:

<?xml version="1.0"?> 
<wrapper> 
    <format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
    <format type="driver" t="123412">001;023</format> 
</wrapper> 

Es habe ich gepflückt willkürlich die Name "Wrapper" für das Wurzelelement; es kann sein, was immer du willst.

+7

Ich möchte nur hinzufügen, dass Sie nicht unbedingt diese Änderung auf der Festplatte tun müssen, aber dass Sie es tun könnten, auf der fliege mit einem Filter 'InputStream' /' Reader'. Insbesondere für große Dateien (oder das Lesen von XML von einer URL) kann dies sehr nützlich sein. Ein 'SequenceInputStream' könnte hier nützlich sein: http://java.sun.com/javase/6/docs/api/java/io/SequenceInputStream.html –

+0

Gute Möglichkeit. ist nicht einfacher, die Parser ?. kann ich die parse() Mehtode ausstellen und überschreiben, um den nicht wohlgeformten Status zu ignorieren? – Haythem

+2

Haythem: Wahrscheinlich nicht, weil sich der Parser tief in der Bibliothek befindet und das Verhalten eines solchen Browsers undefiniert ist (die XML-Bibliotheken wissen nicht, wie sie mit XML mit mehr als einem Wurzelelement umgehen sollen). Wenn Sie so vorgehen, können Ihre XML-XML-Tools und XML-fähigen Tools sofort problemlos damit umgehen (vorausgesetzt, Sie haben dort keine anderen fehlerhaften Teile). –

1

Hinweis: Mit Sax oder Stax können Sie ein nicht korrekt formatiertes XML-Dokument erfolgreich parsen, bis der Fehler FIRST "well formed-ness" auftritt.

(Ich weiß, dass dies nicht zu viel Hilfe ...)

0

Wie der DOM werden Sie dann XML-Datei scannen einen Baum bauen, der Wurzelknoten des Baumes ist wie die als 1 Antwort. Wenn der Parser das oder gar nicht finden kann, kann er sogar den Baum erstellen. Also, es ist besser, die XML-Datei vor der Verarbeitung durch DOM oder Sax zu bearbeiten.