I'm trying to sum up values by groups of 5 using a recursive call template, but something strange is happening.
Here is my input document:
Code:
<LOB full="Happyguard">
<day date="10/05/09" lob="Happyguard" totalFailed="13"></day>
<day date="10/06/09" lob="Happyguard" totalFailed="11"></day>
<day date="10/07/09" lob="Happyguard" totalFailed="8"></day>
<day date="10/08/09" lob="Happyguard" totalFailed="33"></day>
<day date="10/09/09" lob="Happyguard" totalFailed="45"></day>
<day date="10/12/09" lob="Happyguard" totalFailed="9"></day>
<day date="10/13/09" lob="Happyguard" totalFailed="1"></day>
<day date="10/14/09" lob="Happyguard" totalFailed="78"></day>
<day date="10/15/09" lob="Happyguard" totalFailed="42"></day>
<day date="10/16/09" lob="Happyguard" totalFailed="72"></day>
<day date="10/19/09" lob="Happyguard" totalFailed="11"></day>
<day date="10/20/09" lob="Happyguard" totalFailed="38"></day>
<day date="10/21/09" lob="Happyguard" totalFailed="42"></day>
<day date="10/22/09" lob="Happyguard" totalFailed="0"></day>
</LOB>
This is the transformation:
Code:
<xsl:template match="/">
<xsl:for-each select="LOB">
<xsl:call-template name="aggregateWeek"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="aggregateWeek">
<xsl:param name="startPosition" select="1"/>
<xsl:variable name="countDays" select="count(day)"/>
<xsl:variable name="endPosition">
<xsl:choose>
<xsl:when test="$countDays gt ($startPosition + 4)">
<xsl:value-of select="($startPosition + 4)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$countDays"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:element name="week">
<xsl:attribute name="lob" select="@full"/>
<xsl:attribute name="startDate" select="day[position()=$startPosition]/@date"/>
<xsl:attribute name="endDate" select="day[position()=$endPosition]/@date"/>
<xsl:attribute name="totalFailed" select="sum(day[position() ge $startPosition][position() le xs:integer($endPosition)]/@totalFailed)"/>
</xsl:element>
<xsl:if test="xs:integer($endPosition) lt $countDays">
<xsl:call-template name="aggregateWeek">
<xsl:with-param name="startPosition" select="($startPosition + 5)"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Here is the output I'm getting:
Code:
<week startDate="10/05/09" lob="Happyguard" totalFailed="110" endDate="10/09/09"></week>
<week startDate="10/12/09" lob="Happyguard" totalFailed="293" endDate="10/16/09"></week>
<week startDate="10/19/09" lob="Happyguard" totalFailed="91" endDate="10/22/09"></week>
Notice week 2 is not correct. Nodes 1-5 sum correctly. Nodes 11-14 sum correctly. But with week 2, it's almost as if it's summing from nodes 6-14. Can anyone shed light onto what is happening here?
Thanks