2010-02-15 5 views
3

J'utilise la transformation XSLT et j'ai besoin de mettre des données dans la section CDATA et que la variable est présente dans une variable.Comment accéder à la variable dans CDATA à partir de XSLT?

Requête: Comment accéder à une variable dans CDATA? Exemple donné ci-dessous:

<xsl:attribute name ="attributeName"> 
<![CDATA[ 
    I need to access some variable here like 
    *<xsl:value-of select ="$AnyVarible"/>* 
]]> 
</xsl:attribute> 

Comment puis-je utiliser varibale dans CDATA? Note: Je ne peux pas utiliser ->&lt;![CDATA[<xsl:value-of select ="$AnyVarible"/>]]&gt; Merci d'avance.

+1

@Amit: Il n'y a pas de CDATA dans les valeurs d'attribut. – Tomalak

+1

Les sections CDATA sont un moyen de simplifier l'édition de texte - elles vous permettent d'utiliser des caractères non échappés lorsque vous auriez besoin de références d'entités. '

appel AT & T

' et '

appel

' sont sémantiquement équivalents. Les sections CDATA peuvent ne pas apparaître dans les valeurs d'attribut. (En SGML, vous pouvez déclarer que le type d'un attribut est CDATA, ce qui indique au processeur de traiter le balisage en texte brut, XML n'ayant pas cette capacité). Vous souhaiterez peut-être clarifier ce que vous essayez d'obtenir avec votre question CDATA-in-attribute. – iter

Répondre

6

Je suis la solution pour cette ... Pour votre information pour tout le monde ...

+1

Le problème avec cette approche est que vous pouvez vous retrouver avec un code XML non valide. De plus, certains processeurs XSLT (par exemple celui intégré à Mozilla Firefox) ne respecteront pas l'attribut 'disable-output-escaping'. – Lucero

+0

@Lucero: * Comment * pouvez-vous vous retrouver avec un code XML invalide? Sauf si la variable contient ']]>' bien sûr. – Tomalak

+0

@Tomalak, dans ce cas exactement avec le cas ']]>'. Cependant, mon commentaire était plus orienté vers l'utilisation de «disable-output-escapeing» en général. – Lucero

2

CDATA est un texte comme tout autre élément contenu ...

Mais en utilisant l'élément xsl:output, vous devriez être en mesure de préciser quels sont les éléments à écrire comme CDATA avec l'attribut cdata-section-elements.

EDIT:

Maintenant qu'il ya un échantillon valide, je suppose que vous voulez dire ceci:

<xsl:attribute name ="attributeName"> 
<![CDATA[ 
    I need to access some variable here like 
    *]]><xsl:value-of select ="$AnyVarible"/><![CDATA[* 
]]> 
</xsl:attribute> 
+0

oui ... J'ai besoin d'accéder à la variable de CDATA ]]> – Amit

+0

Le 'CDATA' ne peut pas contenir de balises. Vous devez donc ** terminer ** la section 'CDATA', ajouter la balise et démarrer une autre section' CDATA'. – Lucero

+0

@Amit: selon les spécifications, un processeur XML doit gérer les sections CDATA de la même manière qu'il traite un texte simple. Donc, si un outil n'accepte que les données contenues dans CDATA, alors cet outil est cassé. –

3

Si vous souhaitez inclure des sections CDATA dans votre sortie, vous devez utiliser l'attribut cdata-section-elements atribute de xsl: output. Ceci est une liste de noms d'éléments. Tous ces éléments auront leur contenu textuel enveloppé dans CDATA.

<xsl:output cdata-section-elements ="foo" /> 

<foo> 
    <xsl:value-of select="$bar' /> 
</foo> 
Questions connexes