2010-01-07 7 views
1

J'utilise XSLT pour transférer un XML vers un format XML différent. S'il y a des données vides avec l'élément, il s'affichera comme une fermeture automatique, par exemple. <data />, mais je veux le sortir avec la balise de fermeture comme ceci <data></data>.XSLT: transfert de xml avec les balises fermées

Si je change la méthode de sortie de "xml" en "html" alors je peux obtenir le <data></data>, mais je vais perdre le <?xml version="1.0" encoding="UTF-8"?> en haut du document. Est-ce la bonne façon de faire cela?

Merci beaucoup.

Daoming

+2

Y a-t-il une raison pour laquelle vous voulez faire cela? –

+0

L'exigence est de s'assurer qu'ils seront les balises fermées et le fichier XML valide, tels que et En haut du document. –

+0

Non, la question était: Y at-il une * raison * que vous voulez faire cela? – Tomalak

Répondre

3

Si vous voulez cela parce que vous pensez que les étiquettes à fermeture automatique sont moche, alors surmontez-le.

Si vous souhaitez transmettre la sortie à un analyseur XML non conforme sous contrôle, utilisez un analyseur plus performant ou corrigez celui que vous utilisez.

Si c'est hors de votre contrôle, et vous devez l'envoyer à un analyseur XML inadéquat, alors avez-vous vraiment besoin du prologue? Si ce n'est pas le cas, la méthode de sortie html est correcte.

Si vous avez besoin du prologue XML, vous pouvez utiliser la méthode de sortie html et ajouter le préfixe après la transformation, mais avant de l'envoyer à l'analyseur défectueux.

Vous pouvez également le générer au format XML avec des balises à fermeture automatique et le prétraiter avant de l'envoyer à votre analyseur défectueux avec une sorte de sérialisation personnalisée, en utilisant le DOM. S'il ne peut pas gérer les balises à fermeture automatique, alors je suis sûr que ce n'est pas la seule façon d'analyser XML. Vous devrez peut-être faire quelque chose à propos des espaces de noms, par exemple.

Vous pouvez essayer d'ajouter un nœud de texte vide à tous les éléments vides que vous envoyez. Cela pourrait faire l'affaire.

1

éléments auto-fermés et explicitement fermés sont exactement la même chose à aucun égard que ce soit. Ce n'est que si quelque part dans votre chaîne de traitement il y a un outil qui n'est pas au format XML (code qui traite le XML avec regex, par exemple), cela peut faire la différence. À ce stade, vous devriez penser à changer partie du traitement, au lieu de la partie de génération/sérialisation XML.

Questions connexes