site de Fabien Torre


Source de syracuse.xsl

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0">
<xsl:output method="xml" encoding="utf-8" />
<!-- Lecture du document XML -->
<xsl:template match="//syracuse">
<syracuse>
<xsl:choose>
<!-- Cas pour un seul vol -->
<xsl:when test="@value">
<xsl:call-template name="syracuse">
<xsl:with-param name="value" select="@value" />
</xsl:call-template>
</xsl:when>
<!-- Cas pour plusieurs vol dans un intervalle -->
<xsl:when test="@minvalue and @maxvalue">
<xsl:call-template name="boucle">
<xsl:with-param name="current" select="@minvalue" />
<xsl:with-param name="max" select="@maxvalue" />
</xsl:call-template>
</xsl:when>
</xsl:choose>
</syracuse>
</xsl:template>
<!-- Boucler sur plusieurs vols -->
<xsl:template name="boucle">
<xsl:param name="current" />
<xsl:param name="max" />
<xsl:if test="$current <= $max">
<loop num="{$current}">
<xsl:call-template name="syracuse">
<xsl:with-param name="value" select="$current" />
</xsl:call-template>
</loop>
<xsl:call-template name="boucle">
<xsl:with-param name="current" select="$current + 1" />
<xsl:with-param name="max" select="$max" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- Un vol -->
<xsl:template name="syracuse">
<xsl:param name="value" />
<step value="{$value}" />
<xsl:if test="$value > 1">
<xsl:choose>
<xsl:when test="($value mod 2) = 0">
<xsl:call-template name="syracuse">
<xsl:with-param name="value" select="$value div 2" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="syracuse">
<xsl:with-param name="value" select="(3 * $value) + 1" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Fabien Torre Valid HTML5! Valid CSS!
site de Fabien Torre, université de Lille