|
Subject: RE: [xsl] Transform list of elements to a sorted and dynamic HTML table From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Sun, 12 Dec 2004 18:45:07 -0000 |
First sort:
<xsl:variable name="sorted-names" as="element(td)*">
<xsl:perform-sort select="item">
<xsl:sort select="date" order="descending"/>
<td><xsl:sequence select="string(name)"/></td>
</xsl:perform-sort>
</xsl:variable>
Then group:
<xsl:variable name="last-colspan"
select="$columns - (count($sorted-names) mod $columns) + 1
<xsl:for-each-group select="$sorted-names"
group-adjacent="position()-1 idiv $columns">
<tr>
<xsl:for-each select="current-group()">
<xsl:choose>
<xsl:when test=". is $sorted-names[last()] and $last-colspan ne 1">
<td colspan="{$last-colspan}">
<xsl:sequence select="string(.)"/>
</td>
<xsl:otherwise>
<xsl:sequence select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</tr>
</xsl:for-each-group>
Not tested.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Jannis Pohlmann [mailto:info@xxxxxxxxxxx]
> Sent: 12 December 2004 03:58
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Transform list of elements to a sorted and
> dynamic HTML table
>
> Good morning,
>
> I have a list of items, e.g.:
>
> <item>
> <name>Adoreable</name>
> <date>2004-12-11</date>
> </item>
> <item>
> <name>Adjustable</name>
> <date>2004-12-11</date>
> </item>
> <item>
> <name>Bulk</name>
> <date>2004-12-10</date>
> </item>
> <item>
> <name>Condensed</name>
> <date>2004-12-12</date>
> </item>
> <item>
> <name>Compromise</name>
> <date>2004-11-08</date>
> </item>
>
> and I want them to be transformed to a sorted and dynamic
> (columns and rows
> adjustable by variables - $Columns and $Rows) HTML table (using
> recent Version of Saxon and XSLT2.0). The sort element are
> the <date/>-Elements
> (descending), so the table output had to look like this
> ($Columns = 2, $Rows = 2):
>
> <table>
> <tr>
> <td>Condensed</td>
> <td>Adjustable</td>
> </tr>
> <tr>
> <td>Adoreable</td>
> <td>Bulk</td>
> </tr>
> <tr>
> <td colspan="2">Compromise</td>
> </tr>
> </table>
>
> If there are not enough items to fill the columns of the last
> row its last <td> should
> have a "colspan" attribute in order to satisfy layout
> requirements. No empty
> rows should be created (e.g. if there are not enough items to
> fill all <$Rows> rows).
>
> As you may see there exists a second sort element (<name/>,
> ascending) in my example
> but this is no must-have feature.
>
> An alternative way might be to select the first <$Columns *
> $Rows> items (sorted descendingly
> by <date/>, of course) - but I see no solution for this, right now.
>
> Is there a way to handle this problem with the power of XSLT?
>
> Regards,
> Jannis
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Transform list of element, Jannis Pohlmann | Thread | Re: [xsl] Transform list of element, Jannis Pohlmann |
| Re: [xsl] Transform list of element, Jannis Pohlmann | Date | RE: [xsl] How to use xPath expressi, Michael Kay |
| Month |