RE: [xsl] Sorting on two booleans

Subject: RE: [xsl] 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

Current Thread