[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Defining variables as sequence of strings


Subject: Re: [xsl] Defining variables as sequence of strings
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 13 May 2015 22:19:31 -0000

On Wed, May 13, 2015 at 2:54 PM, Joseph L. Casale
jcasale@xxxxxxxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
wrote:
> How does one construct a sequence variable,
>
> <xsl:variable name="MyVar" as="xs:string *">
> </xsl:variable>
>
> where the body either consists of an xsl:choose set or implements the same logic.
> I later use distinct-values($MyVar) in a for-each...


I typically recommend to avoid using explicit XSLT conditional
instructions. This said, here is an example as requested:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xsl:output method="text"/>
 <xsl:template match="/*">
   <xsl:variable name="vDays" as="xs:string*" >
     <xsl:choose>
        <xsl:when test=". eq 'Biology'">
           <xsl:sequence select="'Monday', 'Thursday'"/>
        </xsl:when>
        <xsl:when test=". eq 'Math'">
           <xsl:sequence select="'Tuesday', 'Friday'"/>
        </xsl:when>
     </xsl:choose>
   </xsl:variable>

   <xsl:sequence select="string-join($vDays, ' and ')"/>
 </xsl:template>
</xsl:stylesheet>


This can also be written in a shorter way as:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xsl:output method="text"/>
 <xsl:template match="/*">
   <xsl:variable name="vDays" as="xs:string*" select=
    "if(. eq 'Biology')
        then ('Monday', 'Thursday')
        else if (. eq 'Math')
          then ('Tuesday', 'Friday')
          else () "/>

   <xsl:sequence select="string-join($vDays, ' and ')"/>
 </xsl:template>
</xsl:stylesheet>


Cheers,
Dimitre



>
> Thanks!
> jlc
> 



-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.


Current Thread
Keywords