xsl-list
[Top] [All Lists]

Re: [xsl] Defining variables as sequence of strings

2015-05-13 19:57:11
I typically recommend to avoid using explicit XSLT conditional
instructions. This said, here is an example as requested:

Hi Dimitre,
Thanks for the recommendation, I am certainly inclined to take your
advice however just so I understand can you elaborate on why?

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

That was my first crack, but as it iterates through nodes I need to add
each occurrence to the sequence.

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>

I ended up not worrying about XSLT 1 support for the moment until
I revisit it and used:

    <xsl:variable name="MyVar" as="xs:string *">
      <xsl:sequence select="for $t in distinct-values(/object/property/@type) 
return
                    if ($t='foo')
                      then 'a'
                    else if ($t='bar' or $t='baz' or $t='bof')
                      then 'b'
                    else 'c'" />
    </xsl:variable>

    <xsl:for-each select="distinct-values($MyVar)">
      <xsl:sort select="." />
      <xsl:text>...</xsl:text>
      <xsl:value-of select="." />
      <xsl:text>;&#x0D;&#x0A;</xsl:text>
    </xsl:for-each>

Thanks a lot Dimitre,
jlc
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>