J'analyse un fichier XML à l'aide de Sax Parser of Xerces. La déclaration XML est-elle requise?
Réponses
Trop de publicités?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!