Je suis coincé avec un problème qui semble stupide mais je ne trouve pas la solution ... Avec XLST, j'ai besoin de sommer une liste de valeurs calculées par un template. J'ai donc stocké ces valeurs dans une arborescence (une liste d'éléments "Number" contenus dans un élément racine "Numbers"). Mais quoi que j'essaie de faire avec cette liste self-made, il ne retournera rien, 0 ou une erreur ...XSLT: la somme du fragment d'arbre retournera toujours 0!
Est-ce que quelqu'un sait ce que je fais mal?
<!-- create the tree fragment -->
<xsl:variable name="_subTotals">
<Numbers>
<xsl:for-each select="List">
<xsl:variable name="_Size">
<xsl:call-template name="GetSize">
<xsl:with-param name="_value" select="@value"/>
</xsl:call-template>
</xsl:variable>
<Number>
<xsl:value-of select="$_Size"/>
</Number>
</xsl:for-each>
</Numbers>
</xsl:variable>
<!-- this returns an error: expression must result into a node-set -->
<xsl:message terminate="no">
<xsl:value-of select="sum($_subTotals/Numbers/Number)"/>
</xsl:message>
<!-- transform the tree fragment into a node-set
<xsl:variable name="_Total" select="msxsl:node-set($_subTotals)"/>
<!-- returns nothing -->
<xsl:for-each select="$_Total/Numbers/Number">
<xsl:message terminate="no">
<xsl:value-of select="@value"/>
</xsl:message>
</xsl:for-each>
<!-- returns 0 -->
<xsl:value-of select="sum($_Total/Numbers/Number)"/>
Désolé de ne pas être très précis, mais j'ai essayé de simplifier le problème. En fait, j'utilise un attribut des éléments List comme ID pour obtenir d'autres valeurs d'attribut quelque part dans le document d'entrée, qui sont alors les paramètres (il y en a 3) du modèle GetSize. – Julien
Mais merci pour votre réponse, Richard! Je vais essayer de l'implémenter. – Julien
L'approche de récursivité est générale, cependant les détails (et assurant le noeud de contexte pour XPath est OK) et le rendent arbitrairement complexe :-( – Richard