On 3/04/2003 8:52 Jeff Turner wrote:
Pity about losing the declarative processing model.
Cannot agree more. Declarative is great SoC.
Get real: what is declarative in
<xsl:choose>
<xsl:when test="...">
<xsl:call-template name="blah">
<xsl:with-param name="whatever>
<xsl:for-each select="node()">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>?
Here is the snipped code I had to write a few days ago in order to generate a table of picture thumbnails. Input is something like this
... <fotografie> <foto id="1">whatever</foto> <foto id="2">blah</foto> </fotografie> ...
The stylesheet looks like this:
...
<xsl:template match="fotografie">
<table class="fotografie">
<xsl:call-template name="rowIterator">
<xsl:with-param name="row" select="0"/>
<xsl:with-param name="rows" select="ceiling(count(//foto) div $columns)"/>
</xsl:call-template>
</table>
</xsl:template>
<!-- iterates over rows -->
<xsl:template name="rowIterator">
<xsl:param name="row"/>
<xsl:param name="rows"/>
<xsl:if test="$row < $rows">
<tr valign="top">
<xsl:call-template name="columnIterator">
<xsl:with-param name="row" select="$row"/>
<xsl:with-param name="column" select="0"/>
</xsl:call-template>
</tr>
<xsl:call-template name="rowIterator">
<xsl:with-param name="rows" select="$rows"/>
<xsl:with-param name="row" select="$row + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template> <!-- iterates over columns -->
<xsl:template name="columnIterator">
<xsl:param name="row"/>
<xsl:param name="column"/>
<xsl:variable name="item" select="($row * $columns) + $column + 1"/>
<xsl:if test="$column < $columns">
<td align="center" width="{format-number((1 div $columns), '##%')}">
<xsl:choose>
<xsl:when test="//foto[$item]">
<xsl:apply-templates select="//foto[$item]"/>
</xsl:when>
<xsl:otherwise>
<br/>
</xsl:otherwise>
</xsl:choose>
</td>
<xsl:call-template name="columnIterator">
<xsl:with-param name="row" select="$row"/>
<xsl:with-param name="column" select="$column + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
