2011-03-16 3 views
0

Vous devez être en mesure de passer une seule citation dans la chaîne Cmm'l afin de lire le fichier xml d'origine pour cette phrase. Comment puis-je faire cela?caractère spécial à l'intérieur de la chaîne xslt

<xsl:when test="contains(ct-type/cats, 'Cmml') or contains(ct-type/cats, 'rst')"> 
<xsl:element name="Terms"> 
<xsl:value-of select="'example'"/> 
</xsl:element> 
</xsl:when> 
+0

Il existe deux contraintes ici: Les chaînes littérales XPath ne peuvent pas avoir de délimiteurs en tant que contenu et il en va de même pour la valeur de l'attribut XML. Donc, vous devez aller avec @ DevNull's [réponse] (http://stackoverflow.com/questions/5332938/special-character-inside-of-xslt-string/5333150#5333150) ou utiliser la normalisation des valeurs d'attribut XML en votre faveur dans: ''. Bien sûr, le dernier est ** moins lisible ** ... –

Répondre

0

Vous Apostrophes en tant que valeur d'attribut délimiteurs et utilisez une entité à l'intérieur de la chaîne:

<xsl:when test='contains(ct-type/cats, "Cmm&apos;l") or contains(ct-type/cats, "rst")'> 

Si vous besoin à la fois des guillemets et des apostrophes dans la chaîne, alors vous pouvez utiliser par exemple variables pour les chaînes ou la ponctuation.

0

Vous pouvez transmettre la valeur en tant que variable ou paramètre.

Je suis sûr qu'il y a une bien meilleure façon de le faire, mais je ne peux pas y penser pour le moment.

Voici un exemple de passer comme paramètre avec des valeurs par défaut:

<xsl:template match="doc"> 
    <xsl:param name="cat_type_1"> 
     <xsl:text>Cmm'l</xsl:text> 
    </xsl:param> 
    <xsl:param name="cat_type_2"> 
     <xsl:text>rst</xsl:text> 
    </xsl:param> 
    <xsl:if test="contains(ct-type/cats, $cat_type_1) or contains(ct-type/cats, $cat_type_2)"> 
     <Terms>Example</Terms> 
    </xsl:if> 
    </xsl:template> 
Questions connexes