Subject: RE: Sorting on two booleans
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 26 Feb 2009 17:47:56 -0000
|
> I'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.
So your major sort key is @active (true<false) and your minor sort key is
@published (false<true).
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=0"
> 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=1"
> order="ascending"
> data-type="number"/>
> <xsl:sort select="@active=0 and @published=0"
> order="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
|