Re: [xsl] A smarter choose operation XSL 1.1

Subject: Re: [xsl] A smarter choose operation XSL 1.1
From: DavePawson <davep@xxxxxxxxxxxxx>
Date: Thu, 11 Jun 2009 09:05:20 +0100
Michael Kay wrote:
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.

Would someone expand on this oddity please? I'm guessing 'true' in this case is the xslt version of 'true'... I.e. non-empty?

How does that relate to
($opt.one, $opt.two, $opt.three)[.]  please?

You make it look like a subscript into an array Mike?

regards DaveP


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..





regards


--
Dave Pawson
XSLT XSL-FO FAQ.
http://www.dpawson.co.uk

Current Thread