[XSL] Boucle infinie dû à une utilisation de "contains"
Bonjour,
Savez-vous pourquoi le code XML suivant :
Code:
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="utf-8"?>
<listitems>
<data>
<row link_Fr="http://www.google.fr" />
</data>
</listitems> |
Fonctionne avec le XSL suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="row">
<div>
<xsl:call-template name="RemoveEndLine">
<xsl:with-param name="string" select="@ows_San_Link_Link_Fr" />
</xsl:call-template>
</div>
</xsl:template>
<xsl:template name="RemoveEndLine">
<xsl:param name="string" />
<xsl:choose>
<!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
<xsl:when test="contains($string, '&# 13;')" >
<xsl:call-template name="RemoveEndLine">
<!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
<xsl:with-param name="string" select="substring-before($string, '&# 13;')" />
</xsl:call-template>
</xsl:when>
<!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
<xsl:when test="contains($string, '&# 10;')" >
<xsl:call-template name="RemoveEndLine">
<!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
<xsl:with-param name="string" select="substring-before($string, '&# 10;')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> |
Et pas avec le code de la fonction RemoveEndLine modifiée de cette façon :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
<xsl:template name="RemoveEndLine">
<xsl:param name="string" />
<!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
<xsl:variable name="vbCr">&# 13;</xsl:variable>
<!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
<xsl:variable name="vbLf">&# 10;</xsl:variable>
<xsl:choose>
<xsl:when test='contains($string, $vbCr)' >
<xsl:call-template name="RemoveEndLine">
<xsl:with-param name="string" select="substring-before($string, $vbCr)" />
</xsl:call-template>-->
</xsl:when>
<xsl:when test='contains($string, $vbLf)' >
<xsl:call-template name="RemoveEndLine">
<xsl:with-param name="string" select="substring-before($string, $vbLf)" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string" />
</xsl:otherwise>
</xsl:choose>
</xsl:template> |
J'utilise la parser Microsoft. Le second code a fonctionné dans le passé mais plus maintenant. Désormais, il part en boucle infinie. Cela vient-il de la version du parser utilisé qui aurait pu subir une mise à jour ?
Merci pour votre réponse.
Cordialement,