|
[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: Transform list of elements to a sorted and dynamic
Subject: Re: Transform list of elements to a sorted and dynamic HTML table
From: Geert Josten <Geert.Josten@xxxxxxxxxxx>
Date: Sun, 12 Dec 2004 09:35:12 +0100
|
Hi,
The easiest way of achieving this is by first sorting your items and then trying to put them into
columns. Once the items are sorted, you can do something like:
<xsl:template match="item">
<xsl:if test="position() mod $columns = 1 or $columns = 1">
<tr>
<xsl:variable name="nextpos" select="position() + $columns" />
<xsl:apply-templates select=".|following-sibling::item[$nextpos > position()]" mode="column"/>
</tr>
</xsl:if>
</xsl:template>
<xsl:template match="item" mode="column">
<td>
<xsl:apply-templates select="node()"/>
</td>
</xsl:template>
You need to sort in a separate step (two stylesheets or something like building a document fragment
with sorted items or so) as the following-sibling axis always works on document order, which is not
what you would like here...
Cheers,
Geert
Jannis Pohlmann wrote:
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
--
Geert.Josten@xxxxxxxxxxx
IT-consultant at Daidalos BV, Zoetermeer (NL)
http://www.daidalos.nl/
tel:+31-(0)79-3316961
fax:+31-(0)79-3316464
GPG: 1024D/12DEBB50

|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
| RSS 2.0 |
|
| Atom 0.3 |
|
|