J'analyse un fichier XML à l'aide de Sax Parser de Xerces.
La déclaration XML est-elle <?xml version="1.0" encoding="UTF-8"?>
requise?
xml
xml-declaration
Éros
la source
la source
Réponses:
Dans XML 1.0, la déclaration XML est facultative . Voir la section 2.8 de la recommandation XML 1.0 , où elle dit qu'il "devrait" être utilisé - ce qui signifie qu'il est recommandé, mais pas obligatoire. Dans XML 1.1, cependant, la déclaration est obligatoire . Voir la section 2.8 de la recommandation XML 1.1 , où il est dit "DOIT" être utilisé. Il continue même en disant que si déclarant la déclaration est absente, cela implique automatiquement que le document est un document XML 1.0.
Notez que dans une déclaration XML, les
encoding
etstandalone
sont tous deux facultatifs. Seul leversion
est obligatoire. De plus, ce ne sont pas des attributs, donc s'ils sont présents, ils doivent être dans cet ordre:,version
suivi de anyencoding
, suivi de anystandalone
.Si vous ne spécifiez pas l'encodage de cette manière, les analyseurs XML essaient de deviner quel encodage est utilisé. La recommandation XML 1.0 décrit une manière possible de détecter automatiquement le codage des caractères . En pratique, ce n'est pas vraiment un problème si l'entrée est codée en UTF-8, UTF-16 ou US-ASCII. La détection automatique ne fonctionne pas lorsqu'elle rencontre des encodages 8 bits qui utilisent des caractères en dehors de la plage US-ASCII (par exemple ISO 8859-1) - évitez de les créer si vous le pouvez.
Le
standalone
indique si le document XML peut être correctement traité sans la DTD ou non. Les gens l'utilisent rarement. De nos jours, c'est mal de concevoir un format XML qui manque d'informations sans sa DTD.Mettre à jour:
Une erreur "erreur de prologue / encodage utf-8 invalide" indique que les données réelles que l'analyseur a trouvées à l'intérieur du fichier ne correspondaient pas au codage indiqué dans la déclaration XML. Ou dans certains cas, les données à l'intérieur du fichier ne correspondaient pas au codage détecté automatiquement.
Puisque votre fichier contient une marque d'ordre d'octet (BOM), il doit être en codage 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 par NotePad. La solution simple est de supprimer leencoding
et de dire simplement<?xml version="1.0"?>
. Vous pouvez également le modifier pour dire,encoding="UTF-16"
mais ce serait faux pour le fichier d'origine (qui n'était pas en UTF-16) ou si le fichier est d'une manière ou d'une autre changé en UTF-8 ou un autre encodage.N'essayez pas de supprimer la nomenclature - ce n'est pas la cause du problème. Utiliser NotePad ou WordPad pour éditer XML est le vrai problème!
la source
La déclaration XML est facultative afin que votre XML soit bien formé sans elle. Mais il est recommandé de l'utiliser pour que les analyseurs ne fassent pas d'hypothèses erronées, en particulier sur l'encodage utilisé.
la source
Il n'est requis que si vous n'utilisez pas les valeurs par défaut pour
version
etencoding
(que vous êtes dans cet exemple).la source