[XSLT] variable définie plusieurs fois dans la même portée
Bonjour,
je viens de mettre en exploitation une application web sur un apache tomcat qui utilise des feuilles XSL.
En test, je n'avais aucune erreur mais lors de la mise en exploitation, voilà l'erreur générée dans les logs du serveur :
ERREUR : 'file:***/xsl/inventaireDesDonnees.xsl: line 523: La variable 'envirDesc' est définie plusieurs fois dans la même portée.'
ERREUR BLOQUANTE : 'Impossible de compiler la feuille de style'
Cela vient donc de la variable 'envirDesc' qui est définie 2 fois dans inventaireDesDonnees.xsl. C'est effectivement le cas. Voici la portion du code concernée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
<!-- support d'archivage des données -->
<xsl:if test="dataIdInfo/envirDesc !=''">
<xsl:variable name="envirDesc">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="dataIdInfo/envirDesc"/>
<xsl:with-param name="find">voltot</xsl:with-param>
<xsl:with-param name="rep" select="$libVolTot"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="envirDesc">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="dataIdInfo/envirDesc"/>
<xsl:with-param name="find">/n</xsl:with-param>
<xsl:with-param name="rep"><BR/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<b><xsl:value-of select="$libSupportArchivage"/> : </b><xsl:value-of select="$envirDesc" disable-output-escaping="yes"/><xsl:copy-of select="$br"/><xsl:copy-of select="$br"/>
</xsl:if> |
avec le template replace suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<xsl:template name="replace">
<xsl:param name="str" />
<xsl:param name="find" />
<xsl:param name="rep" />
<xsl:choose>
<xsl:when test="contains($str,$find)">
<xsl:value-of select="substring-before($str,$find)" />
<xsl:value-of select="$rep" />
<xsl:call-template name="replace">
<xsl:with-param name="str" select="substring-after($str,$find)" />
<xsl:with-param name="find" select="$find" />
<xsl:with-param name="rep" select="$rep" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str" />
</xsl:otherwise>
</xsl:choose>
</xsl:template> |
Je ne connais que très peu XSL donc je me tourne vers vous pour savoir quelle parade adoptée.
Est-il possible de regrouper les 2 opérations de remplacement "call-template replace" sous la même variable ?
Toute suggestion sera la bienvenue