Re: [xsl] shortest way to write this xsl:if statement

Subject: Re: [xsl] shortest way to write this xsl:if statement
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Fri, 15 Jun 2012 07:59:01 -0400
At 2012-06-15 12:54 +0100, henry human wrote:
Hello
The following if statement is too long if try it as in the sample bellow.
How could be shorter?
The if - logic to create a for-each loop:
----------------
xsl:if
D4/G100/6id or D4/G100/9id or D4/G100/12id or D4/G100/6id15 or D4/G100/45id or D4/G100/22id, D4/G100/10id
or D4/G100/19id is 'A' or 'B' or 'C', or 'D' or 'F'


The Sample:
<xsl:if test="D4/G100/6id = 'A' OR test="D4/G100/6id = 'B' OR test="D4/G100/6id = 'C' OR test="D4/G100/9id = 'A' OR test="D4/G100/9id = 'B' .....>


<xsl:for-each select=" ......">
...
</xsl:for-each>

</xsl:if>

Element names cannot begin with digits, so I'm unclear how you are going to be testing elements such as <6id>.


But, assuming you had elements D4/G100/X and D4/G100/Y and D4/G100/Z, you could have in XSLT2 the following:

<xsl:if test="D4/G100/(X,Y,Z) = ('A','B','C')">

... which is equivalent to:

  D4/G100/X = 'A' or
  D4/G100/X = 'B' or
  D4/G100/X = 'C' or
  D4/G100/Y = 'A' or
  D4/G100/Y = 'B' or
  D4/G100/Y = 'C' or
  D4/G100/Z = 'A' or
  D4/G100/Z = 'B' or
  D4/G100/Z = 'C'

When using the "=" comparison operator, either operand can be a set. The processor walks through the comparisons in an arbitrary order eventually testing each of the left operand with each of the right operand and stops when it hits a true() result and returns true(). If you get a false() returned, you know the processor has checked every possible combination and every combination has returned false().

I hope this helps.

. . . . . . . . . . . Ken

--
Public XSLT, XSL-FO, UBL and code list classes in Europe -- Oct 2012
Contact us for world-wide XML consulting and instructor-led training
Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm
Crane Softwrights Ltd.            http://www.CraneSoftwrights.com/s/
G. Ken Holman                   mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal

Current Thread