В XSLT:
По какой-то странной причине, когда я указываю число больше 9 в качестве параметра, в результирующем XML-файле выводятся только 2 элемента RowDefinition / ColumnDefinition.
Я использую рекурсивный цикл для обоих.
Это странно, потому что он отлично выводит 9 элементов , когда я даю 9 в качестве значения параметра для rcount / ccount в call-шаблоне draw-grid. Если я укажу 10 в качестве параметра, то внезапно получу только 2 элемента в результирующем XML-файле.
Почему это происходит? Мне нужно 28 строк и 6 цветов.
См. Код:
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:call-template name="draw-grid">
<!--outputs only 2 RowDefinition elements..-->
<xsl:with-param name="rcount">10</xsl:with-param>
<!--works perfectly: I get 9 ColumnDefinition elements-->
<xsl:with-param name="ccount">9</xsl:with-param>
<xsl:with-param name="r">0</xsl:with-param>
<xsl:with-param name="c">0</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="draw-grid">
<xsl:param name="rcount"/>
<xsl:param name="ccount"/>
<xsl:param name="r"/>
<xsl:param name="c"/>
<xsl:element name="Grid">
<xsl:element name="Grid.RowDefinitions">
<xsl:call-template name="draw-rows">
<xsl:with-param name="rcount">
<xsl:value-of select="$rcount"/>
</xsl:with-param>
<xsl:with-param name="r">
<xsl:value-of select="$r"/>
</xsl:with-param>
</xsl:call-template>
</xsl:element>
<xsl:element name="Grid.ColumnDefinitions">
<xsl:call-template name="draw-cols">
<xsl:with-param name="ccount">
<xsl:value-of select="$ccount"/>
</xsl:with-param>
<xsl:with-param name="c">
<xsl:value-of select="$c"/>
</xsl:with-param>
</xsl:call-template>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template name="draw-rows">
<xsl:param name="rcount"/>
<xsl:param name="r"/>
<xsl:if test="$r < $rcount">
<xsl:element name="RowDefinition"/>
</xsl:if>
<xsl:if test="$r < $rcount">
<xsl:call-template name="draw-rows">
<xsl:with-param name="r">
<xsl:value-of select="$r + 1"/>
</xsl:with-param>
<xsl:with-param name="rcount">
<xsl:value-of select="$rcount"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="draw-cols">
<xsl:param name="ccount"/>
<xsl:param name="c"/>
<xsl:if test="$c < $ccount">
<xsl:element name="ColumnDefinition"/>
</xsl:if>
<xsl:if test="$c < $ccount">
<xsl:call-template name="draw-cols">
<xsl:with-param name="c">
<xsl:value-of select="$c + 1"/>
</xsl:with-param>
<xsl:with-param name="ccount">
<xsl:value-of select="$ccount"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>