2010-03-23 18 views
7

Prima di tutto, lasciami dire che sono un nuovo SAX e Java.Il markup deve essere ben formato

Sto cercando di leggere le informazioni da un file XML che non è ben formato.

Quando provo ad usare il SAX o DOM Parser ottengo il seguente errore in risposta:

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

Questo è quanto ho impostato il mio file XML:

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

Posso forzare la SAX o DOM per analizzare i file XML anche se non sono ben formati XML?

Grazie per il vostro aiuto. Molto apprezzato. Haythem

+2

FYI: Per definizione ... Se non è ben formato è ** non ** XML. http://en.wikipedia.org/wiki/XML#Well-formedness_and_error-handling –

risposta

18

La soluzione migliore è rendere l'XML ben formato, probabilmente pre-elaborandolo un po '. In questo caso, è possibile ottenere che semplicemente mettendo una dichiarazione XML su (e anche questo è opzionale) e fornendo un elemento radice (che non è opzionale), in questo modo:

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

Ci ho arbitrariamente scelto il nome "wrapper" per l'elemento radice; può essere quello che vuoi

+7

Vorrei solo aggiungere che non è necessario apportare questa modifica sul disco, ma è possibile farlo sul vola fornendo un filtro 'InputStream' /' Reader'. Soprattutto per i file di grandi dimensioni (o la lettura di XML da un URL) questo può essere molto utile. Un 'SequenceInputStream' potrebbe essere utile qui: http://java.sun.com/javase/6/docs/api/java/io/SequenceInputStream.html –

+0

Buona posibilità. non è più semplice eseguire il parsing ?. posso disattivare il mehtode di parse() e sovrascriverlo per ignorare lo stato non ben formato? – Haythem

+2

Haythem: probabilmente no, perché il parser è in profondità nella libreria e il comportamento di tale browser non sarebbe definito (le librerie XML non sanno come gestire XML con più di un elemento root). Farlo in questo modo rende istantaneamente il tuo XML ben formato e ** tutti gli strumenti ** compatibili con XML possono gestirlo all'improvviso (a patto che non ci siano altre parti errate). –

1

Suggerimento: utilizzando sax o stax è possibile analizzare correttamente un documento xml non ben formato fino a quando non si verifica l'errore FIRST "well formed-ness".

(so che questo non è di troppo aiuto ...)

0

Come il DOM si esegue la scansione di file XML poi costruire un albero, il nodo radice dell'albero è come il come 1 Risposta. Tuttavia, se il parser non riesce a trovare il o anche, può anche costruire l'albero. Quindi, è meglio fare qualche pre-elaborazione del file xml prima di analizzarlo con DOM o Sax.

Problemi correlati