Nic Miloslav     Example 37    KEYWORDS      EXAMPLES      AUTHORS     

Function sum() sums all numbers in selected nodes. Stylesheet 1 sums all numbers, Stylesheet 2 only odd ones.


     XML     HOME     XSL 1     XSL 2      
<xslTutorial >
<number>1</number>
<number>3</number>
<number>4</number>
<number>17</number>
<number>8</number>
<number>11</number>
</xslTutorial>

     XSL 1     HOME     XML     HTML 1     OUTPUT 1     
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:template match="/">
<xsl:for-each select="//number">
<xsl:value-of select="."/>
<xsl:choose>
<xsl:when test='position()=last()'>
<xsl:text> = </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> + </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:value-of select="sum(//number)"/>
</xsl:template>
</xsl:stylesheet>

     HTML 1     HOME     XML     XSL 1     OUTPUT 1     
<HTML>
<HEAD> </HEAD>
<BODY> 1 + 3 + 4 + 17 + 8 + 11 = 44 </BODY> </HTML>

     OUTPUT 1     HOME     XML     XSL 1     HTML 1     
1 + 3 + 4 + 17 + 8 + 11 = 44

     XSL 2     HOME     XML     HTML 2     OUTPUT 2     
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:template match="/">
<xsl:for-each select="//number">
<xsl:variable name="number" select="."/>
<xsl:if test="$number mod 2">
<xsl:value-of select="."/>
<xsl:choose>
<xsl:when test='position()=last()'>
<xsl:text> = </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> + </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="sum(//number[text() mod 2 = true()])"/>
</xsl:template>
</xsl:stylesheet>

     HTML 2     HOME     XML     XSL 2     OUTPUT 2     
<HTML>
<HEAD> </HEAD>
<BODY> 1 + 3 + 17 + 11 = 32 </BODY> </HTML>

     OUTPUT 2     HOME     XML     XSL 2     HTML 2     
1 + 3 + 17 + 11 = 32