Table des matières
Niveau
..........
En rapport...

Remplacer une chaîne par une autre

Lorsqu'on transforme un XML avec une feuille XSLT on a parfois besoin de remplacer une chaîne par une autre.
Nativement, le XSL ne le fait pas mais il y a possibilité de programmer un remplacement.

Code

Vous devez ajoute le template suivant a votre feuille XSL :

xml
<xsl:template name="subst">
	<xsl:param name="text"/>
	<xsl:param name="replace"/>
	<xsl:param name="with"/>
	<xsl:choose>
		<xsl:when test="string-length($replace) = 0">
			<xsl:value-of select="$text"/>
		</xsl:when>
		<xsl:when test="contains($text, $replace)">
			<xsl:variable name="before" select="substring-before($text, $replace)"/>
			<xsl:variable name="after" select="substring-after($text, $replace)"/>
			<xsl:value-of select="$before"/>
			<xsl:value-of select="$with"/>
			<xsl:call-template name="subst">
				<xsl:with-param name="text" select="$after"/>
				<xsl:with-param name="replace" select="$replace"/>
				<xsl:with-param name="with" select="$with"/>
			</xsl:call-template>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="$text"/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

Comment l'utiliser

Normalement, en XSL pour afficher le contenu d'un noeud vous écrivez :

xml
<xsl:apply-templates select="MonNoeudAAfficher" />

où MonNoeudAAfficher est à remplacer par le noeud désiré.
Pour utiliser la fonction de remplacement vous devrez modifier votre ligne comme ceci :

xml
<xsl:call-template name="subst">
     <xsl:with-param name="text">
          <xsl:value-of select="MonNoeudAAfficher"/>
     </xsl:with-param>
     <xsl:with-param name="replace">MaChaineARemplacer</xsl:with-param>
     <xsl:with-param name="with">ChaineDeRemplacement</xsl:with-param>
</xsl:call-template>

où :

Source

Trouvé sur : http://xmlfr.org/listes/xml-tech/2002/03/0243.html



08/01/2007 16:19 -

iDo –