Stefano Mazzocchi <[EMAIL PROTECTED]> wrote:
> 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>
<snip on procedurally oriented XSLT/>
I don't have time to spend on this, but I think what you really want is
something more like
<xsl:template match="fotografie">
<table class="fotografie">
<xsl:for-each select="*[position() mod $columns =
1]">
<xsl:call-template name="rows"/>
</xsl:for-each>
</table>
</xsl:template>
<!-- generate rows-->
<xsl:template name="rows">
<tr valign="top">
<xsl:variable name="lastRowPos" select="position()+
$columns - 1"/>
<xsl:apply-templates mode="cols" select=". |
following-sibling::*[position() < $lastRowPos]"/>
</tr>
</xsl:template>
<!-- generate columns -->
<xsl:template match="*" mode="cols">
<td align="center" width="{format-number((1 div $columns),
'##%')}">
<xsl:template match="foto">
<xsl:value-of select="."/>
</xsl:template>
</td>
</xsl:template>
If you really need the blank cells added in you can do that in the rows
template by calculating if the total # of fotos mod $columns is less than
$columns and just generate the extra <td><br /></td directly to fill out the
table...