Subject: Re: [xsl] Defining variables as sequence of strings From: "Joseph L. Casale jcasale@xxxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 14 May 2015 00:57:05 -0000 |
> 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>;
</xsl:text> </xsl:for-each> Thanks a lot Dimitre, jlc
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Defining variables as seq, Dimitre Novatchev dn | Thread | Re: [xsl] Defining variables as seq, Dimitre Novatchev dn |
Re: [xsl] Defining variables as seq, Dimitre Novatchev dn | Date | Re: [xsl] Defining variables as seq, Dimitre Novatchev dn |
Month |