Re: decode( source,'if-one','1', ... , 'if-n','n','default')

Subject: Re: decode( source,'if-one','1', ... , 'if-n','n','default')
From: James Clark <jjc@xxxxxxxxxx>
Date: Sun, 03 Oct 1999 19:21:53 +0700
"Clark C. Evans" wrote:
> 
> All,
> 
> A decode like function would be wonderful
> to augment substring and other string-minipulation
> functions.  For instance, date conversion:
> 
> <xsl:value-of select="decode((substring('19990912',4,2),1,'Jan',2,'Feb',
>                       3,'Mar',4,'Apr',5,'May',6,'Jun',7,'Jul',8,'Aug',
>                       9,'Sep',10,'Oct',11,'Nov',12,'Dec','Invalid-Month')/>
> 
> => Sep
> 
> Any ideas how to do something like this?  (I'm using <xsl:choose/> )

One way is to create a file month.xml like this:

<months>
<month>Jan</month>
<month>Feb</month>
<month>Mar</month>
<month>Apr</month>
<month>May</month>
<month>Jun</month>
<month>Jul</month>
<month>Aug</month>
<month>Sep</month>
<month>Oct</month>
<month>Nov</month>
<month>Dec</month>
</months>


and then use

<xsl:value-of
  select="document('month.xml')
           /months/month[number(substring('19991003',5,2))]"/>

This approach also makes it easy to localize your XSL stylesheet for
different languages.

A less general approach is something like this:

<xsl:template name="month">
  <xsl:param name="n" select="0"/>
  <xsl:value-of select="substring('JFMAMJJASOND',$n,1)"/>
  <xsl:value-of select="substring('aeapauuuecoe',$n,1)"/>
  <xsl:value-of select="substring('nbrrynlgptvc',$n,1)"/>
</xsl:template>

James


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread