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

sorting and grouping - can't get it to work

Subject: sorting and grouping - can't get it to work
From: Andreas Waechter <A.Waechter@xxxxxxxxx>
Date: Mon, 2 Jul 2001 10:00:10 +0200
sort by two columns xsl
Hello all,

this is my last attempt to get some reaction to my question - previous
attempts to post to this list did not give me any reactions - I did not even
see my own posting to the list, perhaps this is normal (though when I
answered someones post I got my post back from the list). But I also did not
get any answer so I suspect my postings did never arrive.

Now for my question

I have a little problem with data I want to sort and then place into a
two-column table 
(two of the sorted data items in each row).

I am a XML/XSL-Newbie so please forgive me if I ask a too simple question
for you experts.
Here is my problem in detail - I hope I provided all the info you need.

With data like this
<data>
    <item> <name>John</name> </item>
    <item> <name>Ed</name>   </item>
    <item> <name>Bill</name> </item>
    <item> <name>Al</name>   </item>
    <item> <name>Tim</name> </item>
    <item> <name>George</name>   </item>
</data>
I want to get a sorted table with two columns like
<table>
<tr><td>Al</td><td>Bill</td></tr>
<tr><td>Ed</td><td>George</td></tr>
<tr><td>John</td><td>Tim</td></tr>
</table>

By using

<xsl:template match="data/item">
    <table>
        <xsl:for-each select="item[position() mod 2 = 1]">
            <tr>
                <xsl:apply-templates select=". |
following-sibling::item[position()=1]"/> 
                <xsl:if test="not(following-sibling::item[position()=1])">
                    <td>&nbsp;</td>
                </xsl:if>
            </tr>
        </xsl:for-each>
    </table>
</xsl:template>

<xsl:template match="item">
	<td><xsl:value-of select="name"/></td>
</xsl:template>

I managed to get 
<table>
<tr><td>John</td><td>Ed</td></tr>
<tr><td>Bill</td><td>Al</td></tr>
<tr><td>Tim</td><td>George</td></tr>
</table>

i.e. I figured out how to place two consecutive item names in two cells of
one row.
I even managed to fill the last row with an empty cell should the number of
items be odd.

I also know - in principle - how to sort (<xsl:sort select="name"/>).
I just don't know where to place the sort.
If I place it in the existing for-each I get a very confusing "order", 
if I place it in the existing apply-templates, only the two items within
each rows get sorted (as I expected it)

But what I really need is that the sorting of the item takes place before I
start selecting some of them to start rows.
I looked through the FAQ under sorting, grouping and sorting and tables and
also searched the archives but did not find a solution. Forgive me if I
overlooked something.

I don't think it should matter in this case but the software I use to
interprete my XML+XSL files is the Apache module from the XALAN software
(Xalan C++ version 1.1.0).
Could anyone please help? Thanks in advance.

Andreas Waechter

Andreas Waechter        Tel.: +49 (089) 55 24 04-43
Logics Software GmbH    Fax:  +49 (089) 55 24 04-44
Schwanthalerstr. 9-11   mailto:a.waechter@xxxxxxxxx
80336 München           http://www.logics.de


 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.