119 votes

Un fichier XML valide nécessite-t-il une déclaration XML?

J'analyse un fichier XML à l'aide de Sax Parser of Xerces. La déclaration XML est-elle requise?

179voto

Hoylen Points 3842

En XML 1.0, la Déclaration XML est facultatif. Voir la section 2.8 de la Recommandation XML 1.0, où il dit qu'il "devrait" être utilisés, ce qui signifie qu'il est recommandé, mais pas obligatoire. En XML 1.1, cependant, la déclaration est obligatoire. Voir la section 2.8 du XML 1.1 Recommandation, où il est dit "DOIT" être utilisés. Il va même que si la déclaration est absent, ce qui implique automatiquement le document est un document XML 1.0.

Notez que dans une Déclaration XML de l' encoding et standalone sont tous les deux en option. Seulement l' version est obligatoire. Aussi, ce ne sont pas des attributs, donc si ils sont présents, ils doivent être dans l'ordre: version, suivi par n'importe quel encoding, suivi par n'importe quel standalone.

<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>

Si vous ne spécifiez pas l'encodage de cette façon, les parseurs XML essayer de deviner de quel encodage est utilisé. La Recommandation XML 1.0 décrit une façon possible de codage de caractères peut être automatiquement détecté. Dans la pratique, ce n'est pas un problème si l'entrée est codé en UTF-8, UTF-16 ou US-ASCII. La détection automatique ne fonctionne pas lorsqu'il rencontre des 8 bits des encodages qui utilisent des caractères en dehors de l'US-ASCII (par exemple l'ISO 8859-1) -- éviter la création de ces si vous le pouvez.

L' standalone indique si le document XML peut être correctement traitée sans une DTD ou pas. Les gens utilisent rarement. Ces jours-ci, c'est mauvais pour la conception d'un format XML qui est de l'information manquante sans sa DTD.

Mise à jour:

Un "prologue d'erreur/invalide l'encodage utf-8" erreur indique que les données réelles de l'analyseur trouve à l'intérieur du fichier ne correspond pas au codage de la déclaration XML, dit-il. Ou, dans certains cas, les données à l'intérieur du fichier ne correspond pas au détecté automatiquement l'encodage.

Depuis votre fichier contient un ordre des octets (BOM), il doit être en UTF-16. Je soupçonne que votre déclaration, dit - <?xml version="1.0" encoding="UTF-8"?> ce qui est évidemment incorrect lorsque le fichier a été changé en UTF-16 le bloc-notes. La solution la plus simple est de supprimer l' encoding et de dire, simplement, <?xml version="1.0"?>. Vous pouvez également le modifier à-dire encoding="UTF-16" mais ce serait une erreur pour le fichier d'origine (ce qui n'est pas en UTF-16), ou si le fichier est changé en quelque sorte de retour à l'UTF-8 ou un autre encodage.

Ne vous embêtez pas à essayer d'enlever la NOMENCLATURE, ce n'est pas la cause du problème. En utilisant le bloc-notes ou WordPad pour modifier le XML est le vrai problème!

8voto

Pangea Points 36713

Déclaration XML étant facultative votre xml est correctement construit sans elle. Mais il est recommandé de l’utiliser afin que les hypothèses erronées ne sont pas fabriqués par les analyseurs, plus précisément sur l’encodage utilisé.

3voto

Quentin Points 325526

Il est seulement nécessaire si vous n’utilisez pas les valeurs par défaut pour et (qui vous êtes dans cet exemple).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X