ASP Error: 70
Description: Permission denied
Source: Microsoft VBScript runtime error

[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
dynamic sort column in xsl
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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.