This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: sorted table elements


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@virbus.de
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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]