Question

J'ai écrit un outil simple pour générer un ensemble de données XML DBUnit à l'aide des requêtes saisies par l'utilisateur.Je souhaite inclure chaque requête saisie dans le XML sous forme de commentaire, mais l'API DBUnit pour générer le fichier XML ne prend pas en charge l'insertion du commentaire là où je le souhaite (au-dessus des données qu'elle génère), j'ai donc recours à mettre le commentez avec TOUTES les requêtes en haut ou en bas.

Alors ma question :est-ce du XML valide pour le placer à l'un ou l'autre emplacement ?Par exemple, au-dessus de la déclaration XML :

<!-- Queries used: ... -->
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>

Ou sous le nœud racine :

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>
<!-- Queries used: ... -->

Je prévois d'essayer d'abord la déclaration XML, mais j'ai des doutes quant à la validité du XML, malgré l'affirmation de Wikipédia:

Les commentaires peuvent être placés n'importe où dans l'arborescence, y compris dans le texte si le contenu de l'élément est du texte ou #PCDATA.

J'ai l'intention de poster si cela fonctionne, mais ce serait bien de savoir s'il s'agit d'un standard XML officiel.

MISE À JOUR: Voir ma réponse ci-dessous pour le résultat de mon test.

Était-ce utile?

La solution

Selon le Spécification XML, un document XML bien formé est :

document ::= prolog element Misc*

prolog est

prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?

et Misc est

Misc ::= Comment | PI | S

et

XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

ce qui signifie que si vous souhaitez avoir des commentaires en haut, vous ne pouvez pas avoir de déclaration de type XML.

Vous pouvez cependant avoir des commentaires après la déclaration et en dehors de l'élément du document, soit en haut, soit en bas du document, car Misc* peut contenir des commentaires.

La spécification est en accord avec Wikipédia sur les commentaires :

2.5 Commentaires

[Définition:Les commentaires peuvent apparaître n'importe où dans un document en dehors d'autres balises ;de plus, ils peuvent apparaître dans la déclaration de type de document aux endroits autorisés par la grammaire.Ils ne font pas partie des données de caractères du document ;un processeur XML PEUT, mais pas nécessairement, permettre à une application de récupérer le texte des commentaires.Pour des raisons de compatibilité, la chaîne "--" (double trait d'union) NE DOIT PAS apparaître dans les commentaires.] Les références aux entités de paramètres NE DOIVENT PAS être reconnues dans les commentaires.

Tout cela ensemble signifie que vous pouvez mettre des commentaires n'importe où qui n'est pas dans un autre balisage, sauf que tu ne peut pas avoir de déclaration XML si vous commencez par un commentaire.

Cependant, même si en théorie la théorie est en accord avec la pratique, ce n'est pas le cas en pratique, je serais donc curieux de voir comment fonctionne votre expérience.

Autres conseils

Le premier exemple n'est pas du XML valide, la déclaration doit être la première chose dans un document XML.

Mais à part ça, les commentaires peuvent aller ailleurs.

Corriger votre premier exemple :

<?xml version="1.0" encoding="UTF-8"?>
<!-- Queries used: ... -->
<dataset>
</dataset>

L'instruction de traitement doit être la toute première chose dans le contenu XML (voir Commentaire XML et instructions de traitement).Les éléments suivants devraient fonctionner :

<?xml version='1.0' encoding='UTF-8'?>
<!-- Queries used: ... -->
<dataset>
  ...
</dataset>

Merci pour les réponses à tous!

Il s'avère que le commentaire précédant le fichier semble fonctionner, mais lorsque j'ai fouillé dans la source DBUnit, c'est parce que la validation est désactivée.

J'ai essayé un simple chargement de document via :

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("/path/to/file"));

et cela échoue à une exception près car la déclaration XML n'est pas la première chose (comme d'autres l'ont indiqué).

Ainsi, même si DBUnit fonctionnerait, je préfère avoir du XML valide, j'ai donc déplacé le commentaire vers la fin (puisque DBUnit génère la déclaration XML, ce n'est pas une option pour placer le commentaire en dessous, même si je préférerais cela. .du moins pas sans modifier le XML après coup, ce qui représenterait plus de travail que cela n'en vaut la peine).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top