[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Michael Kay wrote:
Re: [xsl] Sorting on two booleans
Subject: Re: [xsl] Sorting on two booleans From: Joelle Tegwen <tegwe002@xxxxxxx> Date: Fri, 27 Feb 2009 08:45:01 -0600 |
Ah! That was it! number()
It didn't occur to me that xslt 1.0 you couldn't sort on a boolean. Thank you so much! Joelle
Michael Kay wrote:
Ah sorry, I missed that subtlety. So the first sort key is @active, descending, and the second is (active = published), false<true:
<xsl:sort select="number(@active = @published)" data-type="number"/>
(or in XSLT 2.0 you can sort booleans directly, with false<true, giving
<xsl:sort select="@active eq @published" />
Alternatively, you can probably do it with a single sort key:
<xsl:for-each select="project">
<xsl:sort select="substring('dcab', 2*@active + @published + 1, 1)"/>
But I haven't tested it and it's a bit obscure for practical use.
Michael Kay http://www.saxonica.com/
-----Original Message-----
From: Joelle Tegwen [mailto:tegwe002@xxxxxxx] Sent: 26 February 2009 17:55
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Sorting on two booleans
That gives me active, not published active, published not active, not published not active, published
But I need the last two reversed. not active, published not active, not published
Thanks Joelle
Michael Kay wrote:
minor sort keySo your major sort key is @active (true<false) and yourI've got a document that looks like this: <projects> <project active="1" published="1">stuff</project> <project active="1" published="0">stuff</project> <project active="0" published="1">stuff</project> <project active="0" published="0">stuff</project> </projects
And I need to be able to sort them (on the fly - it's part of a sortable table in html) in this order and the reverse:
active, not published
active, published
not active, published
not active, not published.
is @published (false<true).@published=0"
That's
<xsl:for-each select...>
<xsl:sort select="@active" data-type="number" order="descending"/>
<xsl:sort select="@published" data-type="published" order="ascending"/>
For the reverse order, flip all the order="" attributes.
Michael Kay http://www.saxonica.com/
I've tried all kinds of ways to sort them to get this to happen including brute force:
<xsl:for-each select="project">
<xsl:sort select="@active=1 and@published=1"order="ascending"
data-type="number"/>
<xsl:sort select="@active=1 and@published=1"order="ascending"
data-type="number"/>
<xsl:sort select="@active=0 and@published=0"order="ascending"
data-type="number"/>
<xsl:sort select="@active=0 andorder="ascending" data-type="number"/> <xsl:copy-of select="."/> </xsl:for-each>
Nothing works. It always comes out with at least one in the wrong spot.
Could someone point me in the right direction? Help me understand what I'm missing about how sort works?
Thanks much in advance Joelle
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Sorting on two booleans, Michael Kay | Thread | [xsl] Grouping & use of keys, Dick Penny |
Re: [xsl] getting combo value,not t, David Carlisle | Date | [xsl] THANKS re Grouping & use of , Dick Penny |
Month |
Keywords