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

Subject: Re: [xsl] shortest way to write this xsl:if statement
From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx>
Date: Fri, 15 Jun 2012 14:57:46 +0200
You might need an XPath expression
   test="D4/G10/(X,Y,Z)[. = ('A','B','C','D')]"
-W


On 15/06/2012, henry human <henry_human@xxxxxxxx> wrote:
> Now the problem is, the loop bellow of xsl:if is only one time created but
I
> have more findings in the if statement
> regarding A, B, C, D (founds at least 4 times because D4/G100/6id = 'A' ,
> D4/G100/9id = 'B' , D4/G100/10id = 'C' , D4/G100/11id ='D')
> => the code bellow of the xsl:if statemnt should be repeated as much as if
> statement find A, B, C, D,..
>
>
>
>
> ----- Urspr|ngliche Message -----
> Von: G. Ken Holman <gkholman@xxxxxxxxxxxxxxxxxxxx>
> An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx; "xsl-list@xxxxxxxxxxxxxxxxxxxxxx"
> <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> CC:
> Gesendet: 13:59 Freitag, 15.Juni 2012
> Betreff: Re: [xsl] shortest way to write this xsl:if statement
>
>
> 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