Боюсь, ваши усилия по выполнению двенадцати xsl:choose
инструкций совершенно напрасны и логически неверны.
Вы можете получить желаемый результат с меньшими усилиями, но вам нужна таблица соответствия для месяцев. Следующее преобразование - только начало. Проведите пробежку, и вы заметите, что:
- Для каждой группы форм будут напечатаны только необходимые строки (все месяцы)
- Если в группе отсутствует месяц, используется значение по умолчанию
- Количество отображаемых месяцев меньше или равно. Formsxml / @ CM (согласно запросу)
Возможно, вы также захотите заполнить справочную таблицу на данный момент, заполненную до июля.
[XSLT 1.0]
<xsl:stylesheet version="1.0"
xmlns:empo="http://stackoverflow.com/users/253811/empo"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<empo:months>
<empo:M id="1">Jan</empo:M>
<empo:M id="2">Feb</empo:M>
<empo:M id="3">Mar</empo:M>
<empo:M id="4">Apr</empo:M>
<empo:M id="5">May</empo:M>
<empo:M id="6">Jun</empo:M>
<empo:M id="7">Jul</empo:M>
</empo:months>
<xsl:template match="/">
<table cellspacing="0" cellpadding="0" width="100%" border="1" borderColorDark="#ffffff" borderColorLight="#000000" class="smlFonts">
<tr height="20" align="center">
<td rowspan="1" width="10%"><b>Name</b></td>
<td rowspan="1" width="7%"><b>Net</b></td>
<td rowspan="1" width="7%"><b>Total</b></td>
<td rowspan="1" width="8%"><b>Average</b></td>
<xsl:apply-templates select="*/Forms"/>
</tr>
</table>
</xsl:template>
<xsl:template match="Forms">
<xsl:variable name="Forms" select="."/>
<xsl:for-each select="document('')/*/
empo:months/empo:M[@id <= $Forms/../@CM]">
<xsl:choose>
<xsl:when test="$Forms/Form[@M=current()/@id]">
<xsl:apply-templates
select="$Forms/Form[@M=current()/@id]"/>
</xsl:when>
<xsl:otherwise>
<tr>
<td>
<xsl:value-of select="."/>
</td>
<td>
0.0000
</td>
<td>
0.0000
</td>
<td>
0.0000
</td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<tr style="color:red">
<td>
<xsl:value-of select="@NAME"/>
<xsl:text> Total</xsl:text>
</td>
<td>
<xsl:value-of select="@NACRES"/>
</td>
<td>
<xsl:value-of select="@TBONUSP"/>
</td>
<td>
<xsl:value-of select="@TP"/>
</td>
</tr>
</xsl:template>
<xsl:template match="Form">
<tr>
<td>
<xsl:value-of select="@GroupName"/>
</td>
<td>
<xsl:value-of select="@NACRES"/>
</td>
<td>
<xsl:value-of select="@TBONUSP"/>
</td>
<td>
<xsl:value-of select="@TP"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>