2010-04-08 14 views
47

Estoy escribiendo un programa en Java que toma un archivo XML personalizado y lo analiza. Estoy usando el archivo XML para el almacenamiento. Recibo el siguiente error en Eclipse.El documento XML de análisis Java da "Contenido no permitido en prólogo". 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 ) 

El principio del archivo XML se incluye:

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

El programa es capaz de leer en el archivo XML, pero cuando llamo DocumentBuilder.parse(XMLFile) para obtener un analizada org.w3c.dom.Document, me sale el error anterior.

No me parece que tenga contenido no válido en el prólogo de mi archivo XML. No puedo entender lo que está mal. Por favor ayuda. Gracias.

+2

Encontré mi error. Estaba leyendo en la carpeta donde estaba el archivo y no en el archivo en sí.Aparentemente, si lee en una carpeta como un archivo y llama a File.exists() en ella, seguirá siendo verdadero. Estúpido ... Gracias por toda la ayuda. – ericso

+0

verifique mi respuesta en http://stackoverflow.com/questions/3665554/about-saxparseexception-content-is-not-allowed-in-prolog/7023984 o simplemente consulte este enlace http://mark.koli.ch/2009 /02/resolving-orgxmlsaxsaxparseexception-content-is-not-allowed-in-prolog.html – Starfish

+0

no sé si ayudará a alguien pero recibí este error al intentar usar flavorDimensions y poner drawable-xhdpi bajo res en mis sabores. Una vez que lo cambié a drawable ... todo arreglado – dangalg

Respuesta

3

El documento se ve bien para mí, pero sospecho que contiene caracteres invisibles. Ábralo en un editor hexadecimal para verificar que realmente no haya nada antes del primer "<". Asegúrese de que los espacios en el encabezado XML sean espacios. Tal vez eliminar el espacio antes de "?>". Compruebe qué saltos de línea se utilizan.

Asegúrese de que el documento sea correcto UTF-8. Algunos editores de Windows guardan el documento como UTF-16 (es decir, cada segundo byte es 0).

+0

He estado editando el archivo XML en el editor de texto de Eclipse. Estoy en una Mac y también uso BBEdit. Verifico si hay personajes invisibles. – ericso

+0

Comprobé caracteres invisibles en BBEdit (Ver> Mostrar texto> Mostrar invisibles) y no veo ningún carácter invisible en la declaración XML. También eliminé el espacio en blanco al final de la declaración. Agregué encoding = "UTF-8" y codificación = "UTF-16 y sigo recibiendo el error – ericso

+0

¿Cuál es la codificación del archivo ?, es decir, no lo que piensas, pero ¿qué dice tu editor? –

7

Asegúrese de que no haya espacios en blanco ocultos al comienzo de su archivo XML. También puede incluir codificación = "UTF-8" (o 16? No hay pista) en el nodo.

+1

Desafortunadamente, esta es la causa. – Esko

+0

Marcado en BBEdit para caracteres ocultos y agregado el atributo de codificación a la declaración XML. Ambos no lo arreglaron. – ericso

0

Si usted es capaz de controlar el archivo XML, trate de añadir un poco más de información al principio del archivo:

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

He añadido tanto standalone = "no" como standalone = "yes". Ambos me dan el mismo error. – ericso

+2

hmmm ... lo siguiente que intento es fuerza bruta: intente obtener un documento ficticio a través del analizador, luego agregue lentamente partes de su documento original hasta que pueda identificar el problema. He estado en ese camino antes :-) –

0

Comprobar cualquier problema de sintaxis en el archivo XML. He encontrado este error al trabajar en xsl/xsp con Cocoon y defino una variable usando un nodo no existente o algo así. Verifica todo el XML.

+0

Aparece el error antes de que pueda hacer algo con el documento analizado. Está fallando cuando llamo a DocumentBuilder.parse (XMLFile). Ejecuté el archivo XML a través de un validador XML (xmlvalidation.com) y me fue bien. – ericso

+0

¿El archivo está disponible en la ubicación especificada? Tal vez su programa no puede acceder al contenido del archivo y el analizador solo dice que lo que funda no es xml válido ... solo adivinar. – Alfabravo

+0

@Alfabravo pregunta un poco diferente, ¿sabes si recibo un error de análisis cómo puedo ver esta excepción. El creador de documentos en Java, no arroja una excepción sino que imprime en la secuencia de error, entonces, ¿cómo puedo notificar al usuario si se proporcionó un archivo corrupto? –

19

Compruebe si el archivo xml tiene algún carácter no deseado como este .Si existe, utilice la siguiente sintaxis para eliminarlo.

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

Encontré esta técnica realmente simple para ser bastante útil como una solución rápida. Sin embargo, para mantener las líneas nuevas, es posible que prefiera la expresión regular 'replaceAll (" [^ \\ x20 - \\ x7e \\ x0A] "," ");' – Patrick

1

Supongo que tiene una codificación xml adecuada y que coincide con Schema.

Si sigue apareciendo este error, verifique el código que anula el xml y el tipo de entrada que ha utilizado. Debido a que los documentos XML declaran su propia codificación, es preferible crear un objeto StreamSource de un InputStream en lugar de un Reader, para que el procesador XML pueda manejar correctamente la codificación declarada [Ref Book: Java in A Nutshell]

Espero que esto ayuda!

8

Creo que esto también es una solución a este problema.

cambiar el tipo de documento desde 'Codificar en UTF-8' Para 'Codificar en UTF-8 sin BOM'

me resolví mi problema haciendo mismos cambios.

1

No proporciona la dirección correcta para el archivo. Debe proporcionar una dirección como C:/Users/xyz/Desktop/myfile.xml

+0

OP la encontró y la indicó en el comentario en el pregunta – kolossus

Cuestiones relacionadas