web-dev-qa-db-fra.com

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 <?xml version="1.0" encoding="UTF-8"?> est-elle requise?

114
eros

Dans XML 1.0, la déclaration XML est facultative . Voir section 2.8 de la recommandation XML 1. , où il est indiqué que "devrait" être utilisé - ce qui signifie que cela est recommandé, mais pas obligatoire. Dans XML 1.1, cependant, la déclaration est obligatoire . Voir section 2.8 de la Recommandation XML 1.1 , où il est indiqué "DOIT" être utilisé. Il est même indiqué ensuite que si 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 variables encoding et standalone sont toutes deux facultatives. Seul le version est obligatoire. En outre, il ne s'agit pas d'attributs. Par conséquent, s'ils sont présents, ils doivent figurer dans cet ordre: version, suivi de tout encoding, suivi de tout standalone.

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

Si vous ne spécifiez pas le codage de cette manière, les analyseurs XML tentent de deviner quel codage est utilisé. La Recommandation XML 1.0 décrit un moyen possible le codage des caractères peut être détecté automatiquement . En pratique, cela ne pose pas vraiment problème si l'entrée est codée au format UTF-8, UTF-16 ou US-ASCII. La détection automatique ne fonctionne pas lorsqu'elle rencontre des codages sur 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 traité correctement sans la DTD ou non. Les gens l'utilisent rarement. De nos jours, il est mauvais de concevoir un format XML pour lequel il manque des informations sans sa DTD.

Mise à jour:

Une erreur "prolog error/invalid utf-8 encoding" indique que les données réelles que l'analyseur trouvé dans le fichier ne correspond pas à l'encodage indiqué par la déclaration XML. Ou, dans certains cas, les données contenues dans le fichier ne correspondaient pas à l'encodage détecté automatiquement.

Étant donné que votre fichier contient une marque d’octets (BOM), il doit être au format UTF-16. Je suppose que votre déclaration indique <?xml version="1.0" encoding="UTF-8"?>, ce qui est évidemment incorrect lorsque le fichier a été modifié en UTF-16 par NotePad. La solution simple consiste à supprimer la encoding et à simplement dire <?xml version="1.0"?>. Vous pouvez également l'éditer pour qu'il soit encoding="UTF-16", mais ce ne serait pas le cas pour le fichier d'origine (qui n'était pas au format UTF-16) ou si le fichier redevenait UTF-8 ou un autre encodage.

N'essayez pas de supprimer la nomenclature, ce n'est pas la cause du problème. Utiliser le bloc-notes ou WordPad pour éditer le XML est le vrai problème!

173
Hoylen

La déclaration XML est facultative, donc votre fichier XML est bien formé sans elle. Mais il est recommandé de l’utiliser pour éviter que les analyseurs syntaxiques fassent des hypothèses erronées, en particulier en ce qui concerne le codage utilisé.

8
Aravind R. Yarram

Cela n'est requis que si vous n'utilisez pas les valeurs par défaut pour version et encoding (que vous êtes dans cet exemple).

3
Quentin