Comment obtenir CDATA de nœud xml à l'aide de xsl ?
Je suis en train d'essayer d'obtenir le CDATA
contenu d'un nœud XML à l'aide de XSL. L'
nœud actuellement ressemble à ceci:
<node id="1" text="Book Information" ><![CDATA[This is sample text]]></node>
J'ai besoin de la This is sample text
pièce. Quelqu'un a une idée à ce sujet?
Merci à l'avance.
- essayé avec le modèle. Mais il n'est pas de retourner n'importe quelle valeur.
- En fait, à partir de diverses ressources, j'ai trouvé quelque chose comme; <xsl:output cdata-section-éléments="text"/> et ensuite chercher CDATA; <xsl:value-of select="node" /> Il ne renvoie rien.
- CDATA est l'encodage d'un artefact (pour éviter beaucoup d'entités), ils n'apparaissent pas dans le fichier XML infoset et donc ne sont généralement pas présents dans les Api et les outils.
- J'ai édité votre question: je pensais que vous étiez en train de faire correspondre uniquement les nœuds xml qui contiennent
CDATA
sections. - Édité question de faire CDATA valide; il doit y avoir 2 crochets fermants.
Vous devez vous connecter pour publier un commentaire.
Bien, si j'utilise cette feuille de style:
sur ce fichier XML:
J'obtiens une erreur d'analyse, parce que
id=1
est XML non valide.De mettre des guillemets autour de la valeur de l'attribut (
id="1"
) et en relançant la feuille de style, j'obtiens en sortie:Donc, il y a un début. Fondamentalement, suffit simplement de traiter la CDATA comme un nœud de texte et vous êtes sur votre chemin.
Vous dit:
Cette approche fonctionne très bien si vous utilisez
value-of
ainsi. Un exemple le long des lignes de votre commentaire, à l'aide devalue-of
à la place. Notez, cependant, quecdata-section-elements
ne fonctionne que sur le côté de sortie, indiquant qui sortie éléments XML que vous souhaitez imprimer que les sections CDATA au lieu de la plaine de vieux données de caractère. Elle n'a rien à voir avec de l'extraction de les données.imprime
Certains autres étapes simples pour y parvenir;
Utilisé W3cschools éditeur à essayer.
Exemple de Fichier XML :
Exemple de fichier XSL :
Résultat Final;
Pour la sortie des sections CDATA:
Vous devez utiliser
xsl:output/@cdata-section-elements
. De http://www.w3.org/TR/xslt#outputOutre DOE, bien sûr.
Vous ne pouvez pas sélectionner des sections CDATA avec XPath. Selon http://www.w3.org/TR/xpath/#data-model
Et de http://www.w3.org/TR/xpath/#section-Text-Nodes
La seule solution que j'ai trouvé sur le web qui fonctionne est-ce -
Cependant, ce n'est pas le plus propre de solutions en particulier si vous avez besoin de l'appliquer dans les différentes parties de votre XSLT. Aussi, si votre entrée XML a déjà la CDATA (c'est à dire que vous êtes en essayant de préserver CDATA) à l'aide de disable-output-escaping ne fonctionne pas depuis le temps de la CDATA a déjà été analysé par le moteur XSLT et tout ce qui vas être de gauche, c'est le contenu qui peut briser le xml.
Voici mon solution -
Selon la façon dont vous êtes à l'aide de XSLT, il est possible d'utiliser des/injecté fonctions. Faire que vous pouvez facilement réduire la quantité de code que vous écrivez et jusqu'à la fin avec beaucoup plus propre à la recherche de modèle:
J'ai essayé avec diverses combinaisons et ont la solution pour cela;