2010-04-08 67 views
47

Sto scrivendo un programma in Java che prende un file XML personalizzato e lo analizza. Sto usando il file XML per l'archiviazione. Sto ottenendo il seguente errore in Eclipse.Il documento XML di analisi Java fornisce "Contenuto non consentito nel prologo". error

[Fatal Error] :1:1: Content is not allowed in prolog. 
org.xml.sax.SAXParseException: Content is not allowed in prolog. 
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239) 
    at  com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283 ) 
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208) 
    at me.ericso.psusoc.RequirementSatisfier.parseXML(RequirementSatisfier.java:61) 
    at me.ericso.psusoc.RequirementSatisfier.getCourses(RequirementSatisfier.java:35) 
    at  me.ericso.psusoc.programs.RequirementSatisfierProgram.main(RequirementSatisfierProgram.java:23 ) 

L'inizio del file XML è incluso:

<?xml version="1.0" ?> 
<PSU> 
    <Major id="IST"> 
     <name>Information Science and Technology</name> 
     <degree>B.S.</degree> 
     <option> Information Systems: Design and Development Option</option> 
     <requirements> 
      <firstlevel type="General_Education" credits="45"> 
       <component type="Writing_Speaking">GWS</component> 
       <component type="Quantification">GQ</component> 

Il programma è in grado di leggere nel file XML, ma quando chiamo DocumentBuilder.parse(XMLFile) per ottenere un analizzato org.w3c.dom.Document, ottengo l'errore di cui sopra.

Non mi sembra di avere contenuto non valido nel prologo del mio file XML. Non riesco a capire cosa c'è che non va. Per favore aiuto. Grazie.

+2

Ho trovato il mio errore. Stavo leggendo nella cartella in cui si trovava il file e non nel file stesso.Apparentemente, se si legge in una cartella come un file e si chiama File.exists(), verrà comunque restituito true. Stupido me ... Grazie per tutto l'aiuto. – ericso

+0

controlla la mia risposta su http://stackoverflow.com/questions/3665554/about-saxparseexception-content-is-not-allowed-in-prolog/7023984 o semplicemente controlla questo link http://mark.koli.ch/2009 /02/resolving-orgxmlsaxsaxparseexception-content-is-not-allowed-in-prolog.html – Starfish

+0

non so se aiuterà qualcuno ma ho ricevuto questo errore cercando di usare flavorDimensions e mettendo drawable-xhdpi sotto res nei miei gusti. Una volta l'ho modificato in disegnabile .. tutto risolto – dangalg

risposta

3

Il documento mi sembra a posto, ma ho il sospetto che contenga caratteri invisibili. Aprilo in un editor esadecimale per verificare che non ci sia davvero nulla prima del primo "<". Assicurati che gli spazi nell'intestazione XML siano spazi. Forse cancella lo spazio prima di "?>". Verifica quali interruzioni di riga vengono utilizzate.

Assicurarsi che il documento sia corretto UTF-8. Alcuni editor di finestre salvano il documento come UTF-16 (vale a dire ogni secondo byte è 0).

+0

Ho modificato il file XML nell'editor di testo Eclipse. Sono su un Mac e uso anche BBEdit. Controllerò per i personaggi invisibili. – ericso

+0

Ho controllato la presenza di caratteri invisibili in BBEdit (Visualizza> Visualizza testo> Mostra invisibili) e non vedo alcun carattere invisibile nella dichiarazione XML. Ho anche cancellato lo spazio bianco alla fine della dichiarazione. Ho aggiunto encoding = "UTF-8" e encoding = "UTF-16 e sto ancora ricevendo l'errore – ericso

+0

Qual è la codifica del file? Ovvero non quello che pensi ma cosa dice il tuo editor? –

7

Assicurarsi che non ci siano spazi bianchi nascosti all'inizio del file XML. Forse include anche encoding = "UTF-8" (o 16? No indizio) nel nodo.

+1

Questa è probabilmente la causa più probabile. – Esko

+0

Controllato in BBEdit per caratteri nascosti e aggiunto l'attributo di codifica alla dichiarazione XML. Entrambi non hanno risolto il problema. – ericso

0

Se siete in grado di controllare il file xml, provare ad aggiungere un po 'più informazioni all'inizio del file:

<?xml version="1.0" encoding="UTF-16" standalone="no"?> 
+0

Ho aggiunto sia standalone = "no" e standalone = "sì". Entrambi mi danno lo stesso errore. – ericso

+2

hmmm ... la prossima cosa che proverei è la forza bruta: prova a ottenere un documento fittizio tramite il parser, quindi aggiungi lentamente parti del documento originale finché non riesci a identificare il problema. Sono già stato su questa strada :-) –

0

controllare qualsiasi problema di sintassi nel file XML. Ho trovato questo errore quando lavoro su xsl/xsp con Cocoon e definisco una variabile usando un nodo inesistente o qualcosa del genere. Controlla l'intero XML.

+0

Ricevo l'errore prima che possa fare qualsiasi cosa con il documento analizzato. Sta fallendo quando chiamo DocumentBuilder.parse (XMLFile). Ho eseguito il file XML tramite un validatore XML (xmlvalidation.com) e ha funzionato bene. – ericso

+0

Il file è disponibile nella posizione specificata? Forse il tuo programma non può accedere al contenuto del file e il parser dice solo che ciò che ha trovato non è valido xml ... solo indovinando. – Alfabravo

+0

@Alfabravo domanda leggermente diversa, sai se ottengo un errore di analisi come posso prendere questa eccezione. Il builder di documenti in Java, non genera eccezioni, piuttosto stampa sul flusso di errori, quindi come posso avvisare l'utente se è stato fornito un file corrotto ?? –

19

Controllare il file xml se ha un carattere di rifiuto simile a questo . Se esiste, utilizzare la seguente sintassi per rimuoverlo.

String XString = writer.toString(); 
XString = XString.replaceAll("[^\\x20-\\x7e]", ""); 
+2

Ho trovato questa tecnica davvero semplice per essere piuttosto utile come soluzione rapida. Per mantenere le newline, però, potresti preferire la regex 'replaceAll (" [^ \\ x20 - \\ x7e \\ x0A] "," ");' – Patrick

1

Presumo che tu abbia la corretta codifica xml e la corrispondenza con Schema.

Se si verifica ancora questo errore, verificare il codice che esclude l'xml e il tipo di input che è stato utilizzato. Poiché i documenti XML dichiarano la propria codifica, è preferibile creare un oggetto StreamSource da un InputStream anziché da un Reader, in modo che il processore XML possa gestire correttamente la codifica dichiarata [Ref Book: Java in A Nutshell]

Spero che questo aiuta!

8

Penso che questa sia anche una soluzione a questo problema.

modificare il tipo di documento da 'Encode in UTF-8' Per 'Encode in UTF-8 senza BOM'

mi sono risolto il mio problema facendo stesse modifiche.

1

Non si sta fornendo l'indirizzo corretto per il file. È necessario fornire un indirizzo come C:/Users/xyz/Desktop/myfile.xml

+0

OP lo ha scoperto e indicato nel commento sul domanda – kolossus

Problemi correlati