XSL : remplacer une chaîne de caractères
Hello,
Ayant eu récemment le cas, je vous partage une solution pour ce genre de problématique. Cela peut s'avérer utile par exemple pour faire une modification sur une chaîne récurrente.
Objectif : avoir un moyen qui permette dans une chaîne de caractères donnée de remplacer une partie de la chaîne par une autre.
Solution : créer un template récursif prenant 3 paramètres, la chaîne à analyser, la chaîne à remplacer, la nouvelle valeur de la chaîne.
Grosso modo vous vous retrouvez avec un code qui ressemble à ça:
<xsl:template name="replace-string">
<xsl:param name="str" />
<xsl:param name="strToReplace" />
<xsl:param name="newStr" />
<xsl:if test="string-length(substring-before($str,$strToReplace)) =0">
<xsl:value-of select="$str" />
</xsl:if>
<xsl:if test="string-length(substring-before($str,$strToReplace)) > 0">
<xsl:value-of select="substring-before($str,$strToReplace)" />
<xsl:value-of select="$newStr" />
</xsl:if>
<xsl:if test="string-length(substring-after($str,$strToReplace)) > 0">
<xsl:call-template name="replace-string">
<xsl:with-param name="str" select="substring-after($str,$strToReplace)" />
<xsl:with-param name="strToReplace" select="$strToReplace" />
<xsl:with-param name="newStr" select="$newStr" />
</xsl:call-template>
</xsl:if>
</xsl:template>
Il ne vous reste plus qu'à appeler votre template avec le traditionnel apply-templates et en précisant les valeurs des 3 paramètres.
Le tour est joué!
Vincent
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :