Hello,
J'essaie de transformer certaines chaînes de caractères qui font planter une appli dans un fichier XML à l'aide de XSLT 1.0.
Pour cela j'utilise un template que j'essaie d'appeler plusieurs fois. Hors, seul le dernier appel au template fonctionne, et ne me change donc que le dernier string d'une série.
Pour illustrer :
Le XML que je veux modifier :
Le template XSLT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?xml version="1.0" encoding="UTF-8"?> <RAPPORT> <reason>debut test_test_145 ‘ et test 151 — fin test</reason> </RAPPORT>
Les appels au template :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <xsl:template name="globalReplace"> <xsl:param name="outputString"/> <xsl:param name="target"/> <xsl:param name="replacement"/> <xsl:choose> <xsl:when test="contains($outputString,$target)"> <xsl:value-of select="concat(substring-before($outputString,$target),$replacement)"/> <xsl:call-template name="globalReplace"> <xsl:with-param name="outputString" select="substring-after($outputString,$target)"/> <xsl:with-param name="target" select="$target"/> <xsl:with-param name="replacement" select="$replacement"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$outputString"/> </xsl:otherwise> </xsl:choose> </xsl:template>
Le résultat attendu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <xsl:template match="text()"> <xsl:call-template name="globalReplace"> <xsl:with-param name="outputString" select="."/> <xsl:with-param name="target" select="'‘'"/> <xsl:with-param name="replacement" select="' '"/> </xsl:call-template> </xsl:template> <xsl:template match="text()"> <xsl:call-template name="globalReplace"> <xsl:with-param name="outputString" select="."/> <xsl:with-param name="target" select="'—'"/> <xsl:with-param name="replacement" select="' '"/> </xsl:call-template> </xsl:template>
Le résultat effectif :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?xml version="1.0" encoding="UTF-8"?> <RAPPORT> <reason>debut test_test_145 et test 151 _fin test</reason> </RAPPORT>
où PUI représente un caractère non désiré, qui fait planter l'appli utilisatrice du XML...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?xml version="1.0" encoding="UTF-8"?> <RAPPORT> <reason>debut test_test_145PUI et test 151 _fin test</reason> </RAPPORT>
Auriez-vous une idée ou piste pour m'aider
Partager