it-swarm.dev

Java l'analisi del documento XML restituisce l'errore "Contenuto non consentito nel prologo"

Sto scrivendo un programma in Java che prende un file XML personalizzato e lo analizza. Sto usando il file XML per l'archiviazione. Ricevo il seguente errore in Eclipse.

[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 parsed org.w3c.dom.Document, Ottengo l'errore sopra.

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

49
ericso

Controlla il file xml se ha caratteri spazzatura come questo � Se esiste, usa la sintassi seguente per rimuoverlo.

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

Penso che questa sia anche una soluzione a questo problema.

Cambia il tipo di documento da 'Codifica in UTF-8' A 'Codifica in UTF-8 senza DBA'

Ho risolto il mio problema facendo le stesse modifiche.

9
Java_Alert

Assicurati che non ci siano spazi nascosti nascosti all'inizio del tuo file XML. Forse includi anche encoding = "UTF-8" (o 16? Nessun indizio) nel nodo.

7
Ben J

Il documento mi sembra perfetto ma sospetto che contenga caratteri invisibili. Aprilo in un editor esadecimale per verificare che non ci sia davvero nulla prima del primo "<". Assicurarsi che gli spazi nell'intestazione XML siano spazi. Forse eliminare lo spazio prima di "?>". Controlla quali interruzioni di riga vengono utilizzate.

Assicurarsi che il documento sia UTF-8 corretto. Alcuni editor di Windows salvano il documento come UTF-16 (ovvero ogni secondo byte è 0).

3
Aaron Digulla

Non stai fornendo l'indirizzo corretto per il file. Devi fornire un indirizzo come C:/Users/xyz/Desktop/myfile.xml

1
Amit Agarwal

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

Se l'errore persiste, controllare il codice che annulla il codice XML e il tipo di input 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 sia di aiuto!

1
spark07

Se riesci a controllare il file xml, prova ad aggiungere un po 'più di informazioni all'inizio del file:

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

Controlla eventuali problemi 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
Alfabravo