web-dev-qa-db-fra.com

Java) L'analyse du document XML donne l'erreur "Contenu non autorisé dans le prologue."

J'écris un programme dans Java qui prend un fichier XML personnalisé et le analyse. J'utilise le fichier XML pour le stockage. Le message d'erreur suivant s'affiche dans 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  )

Le début du fichier XML est inclus:

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

Le programme est capable de lire le fichier XML, mais lorsque j'appelle DocumentBuilder.parse(XMLFile) pour obtenir une analyse org.w3c.dom.Document Analysée, l'erreur ci-dessus apparaît.

Il ne me semble pas que le prologue de mon fichier XML contienne un contenu non valide. Je ne peux pas comprendre ce qui ne va pas. S'il vous plaît aider. Merci.

49
ericso

Veuillez vérifier si le fichier xml contient un caractère indésirable comme celui-ci. S'il existe, utilisez la syntaxe suivante pour le supprimer.

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

Je pense que ceci est également une solution de ce problème.

Changez votre type de document de 'Encoder dans UTF-8' À 'Encoder dans UTF-8 sans nomenclature'

J'ai résolu mon problème en faisant les mêmes changements.

9
Java_Alert

Assurez-vous qu'il n'y a pas d'espaces cachés au début de votre fichier XML. Vous pouvez également éventuellement inclure encoding = "UTF-8" (ou 16? Aucun indice) dans le nœud.

7
Ben J

Le document me semble correct mais je soupçonne qu’il contient des caractères invisibles. Ouvrez-le dans un éditeur hexadécimal pour vérifier qu'il n'y a vraiment rien avant le tout premier "<". Assurez-vous que les espaces dans l'en-tête XML sont des espaces. Supprimez peut-être l'espace avant "?>". Vérifiez quels sauts de ligne sont utilisés.

Assurez-vous que le document est correct UTF-8. Certains éditeurs Windows enregistrent le document au format UTF-16 (c’est-à-dire que chaque octet sur deux est 0).

3
Aaron Digulla

Vous ne fournissez pas l'adresse correcte pour le fichier. Vous devez fournir une adresse telle que C:/Users/xyz/Desktop/myfile.xml

1
Amit Agarwal

Je suppose que vous avez un encodage XML correct et une correspondance avec Schema.

Si vous obtenez toujours cette erreur, vérifiez le code qui annule le code XML et le type d'entrée que vous avez utilisés. Étant donné que les documents XML déclarent leur propre codage, il est préférable de créer un objet StreamSource à partir d'un InputStream plutôt que d'un Reader, afin que le processeur XML puisse gérer correctement le codage déclaré. [Ref Book: Java in Un bref]

J'espère que cela t'aides!

1
spark07

Si vous êtes capable de contrôler le fichier XML, essayez d'ajouter un peu plus d'informations au début du fichier:

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

Vérifiez tout problème de syntaxe dans le fichier XMl. J'ai trouvé cette erreur lorsque je travaillais sur xsl/xsp avec Cocoon et je définissais une variable en utilisant un nœud non existant ou quelque chose comme ça. Vérifiez tout le XML.

0
Alfabravo