dans un template (choppé sur les tutoriaux de ce site) il y avait une sorte d'appel récursif du style

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
<xsl:template name="total">
<xsl:param name="noeuds" />
<xsl:param name="s_total" />
 
<xsl:choose>
	<xsl:when test="$noeuds[position()>1]">
	<xsl:call-template name = "total" >
	<xsl:with-param name="noeuds" select="$noeuds[position()>1]"></xsl:with-param>
	<xsl:with-param name="s_total" select="$s_total+(number($noeuds[1]/nb)*number($noeuds[1]/prix))"></xsl:with-param>
	</xsl:call-template>
	</xsl:when>
 
	<xsl:otherwise>
	total : <xsl:value-of select="$s_total+(number($noeuds[1]/nb)*number($noeuds[1]/prix))" />
	</xsl:otherwise>
J'ai trimmé comme une hyenne avant de comprendre que la fonction position() ne renvoit pas la position "absolue" du noeud dans l'arbre XML d'origine, mais bien la position dans la liste traitée.
Le noeud de position 2 dans le premier appel au template devient le noeud de position 1 dans l'appel suivant.
Donc $noeuds[1] parcours bien tous les éléments d'une liste que l'on décapite de son premier élément à chaque appel récursif...

1/ est ce que ma déduction ci dessus est bien correcte ?

2/ Il y a un endroit où c'est expliqué clairement ca ?
Parceque
"The position function returns a number equal to the context position from the expression evaluation context."
ca veut rien dire aux premier abords.