[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: sorted table elements

Subject: Re: sorted table elements
From: Joerg Heinicke <joerg.heinicke@xxxxxx>
Date: Fri, 04 Oct 2002 12:02:46 +0200
sorted table
Hello Saverio,

you are on the right way, but it's a dead-end street ;-)

The problem: While you sort the elements and bring them into a new order, following-sibling still uses document order, not the order after the sorting. You must store the sorting in a variable:

<xsl:variable name="sortedElements">
    <xsl:for-each select="*">
        <xsl:sort data-type="text" select="name()"/>
        <xsl:copy-of select="."/>
    </xsl:for-each>
</xsl:variable>

But now you have a Result Tree Fragment (RTF) in your variable, no longer a node set, on which you can operate. You have to use an extension function zo convert it back to a node set. For this you can use EXSLT or vendor specific extension functions: http://www.exslt.org/exsl/functions/node-set/index.html.

<xsl:variable name="sortedElementsNodeSet" select="exslt:node-set($sortedElements)/*"/>

Now preceding-sibling or following-sibling works correctly:

<xsl:for-each select="$sortedElementsNodeSet[position() mod 4 = 1">
  <tr>
    <xsl:for-each select=".|following-sibling::node()[position() &lt; 4]">
      <td>...</td>
    </xsl:for-each>
  </tr>
</xsl:for-each>

Hope this works, it's untested ;-)

Regards,

Joerg

Saverio Perugini wrote:
Hello,

I'd like to produce a 4 column HTML table where each <td>
element is alphabetically sorted from cell 1,1 to cell n,4
(where n is the required number of rows).

The following is an attempt:

<table>
   <xsl:for-each select="*[position() mod 4 = 1]">
      <xsl:sort data-type="text" select="name()"/>
         <tr>
            <xsl:for-each select=".|following-sibling::node()[position() &lt; 4]">
               <td>...</td>
            </xsl:for-each>
         </tr>
   </xsl:for-each>
</table>

This code only sorts all the *[position() mod 4 = 1] elements.
Therefore, only column one is sorted, whereas I wanted the entire
table (an linear list from cell 1,1 to cell n,4 sorted).  Can this be done?

Thank You and Best Regards,

S. Perugini

--


System Development
VIRBUS AG
Fon  +49(0)341-979-7419
Fax  +49(0)341-979-7409
joerg.heinicke@xxxxxxxxx
www.virbus.de

VIRBUS hat jetzt als erster deutscher Softwarehersteller die Zertifizierung für den 3D Secure-Authentifizierungsstandard "Verified by Visa" erhalten. Details unter http://www.virbus.de/de/press/pressemitteilung/20020828_verified_by_VISA.


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list



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.