Re: variable & récursivité

Herve AGNOUX <[email protected]>
Newsgroups gmane.text.xml.french.tech
Organization SARL diaam informatique
Message-ID <[email protected]>
Pourriez-vous faire des exemples plus courts ?... Je n'ai pas le temps 
d'analyser le vôtre.

Peut être pourriez-vous vous inspirer de 
http://www.dpawson.co.uk/xsl/sect2/recursion.html (Recursion Examples).

Vous verrez que dans le premier ils utilisent la variable en jeu dans la 
récursion pour la stopper éventuellement :

<xsl:template name="KMFDM">
  <xsl:param name="counter" />
  <xsl:if test="$counter &lt; 11">
...
</xsl:if>
</xsl:template>

Si donc counter est "&lt;" que 11, la récursion continue, sinon elle s'arrête.

Etc.


Le Mardi 9 Mai 2006 17:15, julien TOUCHE a écrit :
> Bonjour
>
> j'ai un problème d'algorithme appliqué au xsl. j'ai les fonctions
> suivantes (pseudo-code)
>
> generate-fo:
>          <xsl:choose>
>            <xsl:when test="image/note &lt; 3">
>               <xsl:call-template name="p3parPage">
>            </xsl:when>
>            <xsl:otherwise>
>              <xsl:call-template name="p1parPage">
>            </xsl:otherwise>
>          </xsl:choose>
>
> p1parPage
> 	[...]
>         <xsl:if test="string($image[$cur_position+1]/path)">
>          <xsl:choose>
>            <xsl:when test="$image[$cur_position+1]/note &lt; 3">
>              <xsl:call-template name="p3parPage" select-into="retval">
>            </xsl:when>
>            <xsl:otherwise>
>              <xsl:call-template name="p1parPage">
>            </xsl:otherwise>
>          </xsl:choose>
>         </xsl:if>
>
> p3parPage
> 	[...]
> 	traite première photo
> 	[...]
>         <xsl:if test="string($image[$cur_position+1]/path) and
> ($cur_position+1 &lt; $nbPhotos)">
>          <xsl:choose>
>            <xsl:when test="$image[$cur_position+1]/note &lt; 3">
>              <xsl:call-template name="Affiche1photoSur3">
>            </xsl:when>
>            <xsl:otherwise>
>              <xsl:call-template name="p1parPage" select-into="retval">
>            </xsl:otherwise>
>          </xsl:choose>
>         </xsl:if>
>
>         <xsl:if test="string($image[$cur_position+2]/path) and
> ($cur_position+2 &lt; $nbPhotos) and $retval!='end'">
>          <xsl:choose>
>            <xsl:when test="$image[$cur_position+2]/note &lt; 3">
>              <xsl:call-template name="Affiche1photoSur3">
>            </xsl:when>
>            <xsl:otherwise>
>              <xsl:call-template name="p1parPage">
>            </xsl:otherwise>
>          </xsl:choose>
>         </xsl:if>
>
>         <xsl:if test="string($image[$cur_position+3]/path) and
> ($cur_position+3 &lt; $nbPhotos) and $retval!='end'">
>          <xsl:choose>
>            <xsl:when test="$image[$cur_position+3]/note &lt; 3">
>              <xsl:call-template name="p3parPage" select-into="retval">
>            </xsl:when>
>            <xsl:otherwise>
>              <xsl:call-template name="p1parPage">
>            </xsl:otherwise>
>          </xsl:choose>
>         </xsl:if>
>         <xsl:if test="($cur_position+3 &lt; $nbPhotos)"><xsl:return
> select="end" /></xsl:if>
>
>
> le "programme" sert à faire un album photo et selon les notes des
> photos, les afficher soit 3 par page, soit 1 par page. En l'absence de
> variable modifiable, le programme se fait en récursif.
> Problème dont je ne me suis pas aperçu initialement, utilisation de cas
> particuliers (toutes la mêmes notes ou placement des notes).
> maintenant, quand j'applique la feuille xsl sur un grand nombre, cela
> s'exécute correctement mais lorsqu'il "dépile" la récursion, il traite
> plusieurs fois une même photo ...
> en l'absence de variable modifiable, j'ai essayé xsl:return mais
> celui-ci est bloqué dans le contexte du xsl:when/otherwise et n'est donc
> pas utilisable ...
>
> qq un aurait une idée pour réussir à dire que c'est fini ?
>
> merci
> @+
>
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
> Liste de diffusion "[email protected]" (http://xmlfr.org).
>
> Cette liste est a votre disposition pour discuter en francais de
> tout sujet technique lie a XML.
>
> Pour resilier votre abonnement, envoyez un message contenant
> la commande "unsubscribe" a [email protected]
> (mailto:[email protected]?Subject=unsubscribe)

-- 
SARL diaam informatique - 04 77 25 43 28
Ingenierie, développements de systèmes d'information
http://www.diaam-informatique.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.