RE: [xsl] A smarter choose operation XSL 1.1

Subject: RE: [xsl] A smarter choose operation XSL 1.1
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 10 Jun 2009 22:53:51 +0100
select="(1.0, 1.7, 2.25, 3.0)[count(($opt.one, $opt.two, $opt.three)[.])+1]"

The strange predicate [.] selects items in the sequence that are true.

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay  

> -----Original Message-----
> From: Karl Stubsjoen [mailto:kstubs@xxxxxxxxx] 
> Sent: 10 June 2009 22:20
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] A smarter choose operation XSL 1.1
> 
> I have 3 optional param values that are either true/false.  I 
> need a solution which will return 4 different numbers when:
> 
> 1) all param values are true
> 2) two param values are true
> 3) one param value is true
> 4) none are true
> 
> I was about to write one big choose and then thought maybe 
> there is a more efficient way of doing it.  So any ideas on 
> this one?  For sake of discussion, here is a mock up of the 
> template and param values I
> have:
> 
> <xsl:template name="test">
>   <xsl:param name="optional.one" select="true()" />
>   <xsl:param name="optional.two" select="true()" />
>   <xsl:param name="optional.three" select="true()" />
> 
>   <!--
>     Return:
> 
>     When All, return 3.00
>     When Two, return 2.25
>     When One, return 1.70
>     When Zero, return 1.00
>    -->
> 
> </xsl:template/>
> 
> Thanks for the help!
> 
> Karl..

Current Thread