Getting Names for Days and Months

Problem

You want to convert from numerical values for days and months to symbolic values.

Solution

If internationalization is not important to your application, then the following simple code will do:

  <xsl:template name="date:get-day-of-the-week-name">
    <xsl:param name="day-of-the-week"/>
   
    <xsl:choose>
      <xsl:when test="$day-of-the-week = 0">Sunday</xsl:when>
      <xsl:when test="$day-of-the-week = 1">Monday</xsl:when>
      <xsl:when test="$day-of-the-week = 2">Tuesday</xsl:when>
      <xsl:when test="$day-of-the-week = 3">Wednesday</xsl:when>
      <xsl:when test="$day-of-the-week = 4">Thursday</xsl:when>
      <xsl:when test="$day-of-the-week = 5">Friday</xsl:when>
      <xsl:when test="$day-of-the-week = 6">Saturday</xsl:when>
      <xsl:otherwise>
          error: <xsl:value-of select="$day-of-the-week"/>
        </xsl:otherwise>
    </xsl:choose>
   
  </xsl:template>
   
   <xsl:template name="date:get-day-of-the-week-abbreviation">
    <xsl:param name="day-of-the-week"/>
   
    <xsl:choose>
      <xsl:when test="$day-of-the-week = 0">Sun</xsl:when>
      <xsl:when test="$day-of-the-week = 1">Mon</xsl:when>
      <xsl:when test="$day-of-the-week = 2">Tue</xsl:when>
      <xsl:when test="$day-of-the-week = 3">Wed</xsl:when>
      <xsl:when test="$day-of-the-week = 4">Thu</xsl:when>
      <xsl:when test="$day-of-the-week = 5">Fri</xsl:when>
      <xsl:when test="$day-of-the-week = 6">Sat</xsl:when>
      <xsl:otherwise>
          error: <xsl:value-of select="$day-of-the-week"/>
        </xsl:otherwise>
    </xsl:choose>
   
  </xsl:template>
   
  <xsl:template name="date:get-month-name">
    <xsl:param name="month"/>
   
    <xsl:choose>
      <xsl:when test="$month = 1">January</xsl:when>
      <xsl:when test="$month = 2">February</xsl:when>
      <xsl:when test="$month = 3">March</xsl:when>
      <xsl:when test="$month = 4">April</xsl:when>
      <xsl:when test="$month = 5">May</xsl:when>
      <xsl:when test="$month = 6">June</xsl:when>
      <xsl:when test="$month = 7">July</xsl:when>
      <xsl:when test="$month = 8">August</xsl:when>
      <xsl:when test="$month = 9">September</xsl:when>
      <xsl:when test="$month = 10">October</xsl:when>
      <xsl:when test="$month = 11">November</xsl:when>
      <xsl:when test="$month = 12">December</xsl:when>
      <xsl:otherwise>error: <xsl:value-of select="$month"/></xsl:otherwise>
    </xsl:choose>
   
  </xsl:template>
   
  <xsl:template name="date:get-month-abbreviation">
    <xsl:param name="month"/>
   
    <xsl:choose>
      <xsl:when test="$month = 1">Jan</xsl:when>
      <xsl:when test="$month = 2">Feb</xsl:when>
      <xsl:when test="$month = 3">Mar</xsl:when>
      <xsl:when test="$month = 4">Apr</xsl:when>
      <xsl:when test="$month = 5">May</xsl:when>
      <xsl:when test="$month = 6">Jun</xsl:when>
      <xsl:when test="$month = 7">Jul</xsl:when>
      <xsl:when test="$month = 8">Aug</xsl:when>
      <xsl:when test="$month = 9">Sep</xsl:when>
      <xsl:when test="$month = 10">Oct</xsl:when>
      <xsl:when test="$month = 11">Nov</xsl:when>
      <xsl:when test="$month = 12">Dec</xsl:when>
      <xsl:otherwise>error: <xsl:value-of select="$month"/></xsl:otherwise>
    </xsl:choose>
   
  </xsl:template>

Discussion

These templates are just fine if your application will never be used outside of the English-speaking world. However, you might consider using a table-driven approach for added portability:

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:date="http://www.ora.com/XSLTCookbook/NS/dates">
   
<!-- United States : us -->
<date:month country="us" m="1"  name="January" abbrev="Jan" />
<date:month country="us" m="2"  name="February" abbrev="Feb"/>
<date:month country="us" m="3"  name="March" abbrev="Mar"/>
<date:month country="us" m="4"  name="April" abbrev="Apr"/>
<date:month country="us" m="5"  name="May" abbrev="May"/>
<date:month country="us" m="6"  name="June" abbrev="Jun"/>
<date:month country="us" m="7"  name="July" abbrev="Jul"/>
<date:month country="us" m="8"  name="August" abbrev="Aug"/>
<date:month country="us" m="9"  name="September" abbrev="Sep"/>
<date:month country="us" m="10" name="October" abbrev="Oct"/>
<date:month country="us" m="11" name="November" abbrev="Nov"/>
<date:month country="us" m="12" name="December" abbrev="Dec"/>
   
<!-- Germany : de -->
<date:month country="de" m="1"  name="Januar" abbrev="Jan"/>
<date:month country="de" m="2"name=";Februar" abbrev="Feb"/>
<date:month country="de" m="3"  name="März" abbrev="Mär"/>
<date:month country="de" m="4"  name="April" abbrev="Apr"/>
<date:month country="de" m="5"  name="Mai" abbrev="Mai"/>
<date:month country="de" m="6"  name="Juni" abbrev="Jun"/>
<date:month country="de" m="7"  name="Juli" abbrev="Jul"/>
<date:month country="de" m="8"  name="August" abbrev="Aug"/>
<date:month country="de" m="9"  name="September" abbrev="Sep"/>
<date:month country="de" m="10" name="Oktober" abbrev="Okt"/>
<date:month country="de" m="11" name="November" abbrev="Nov"/>
<date:month country="de" m="12" name="Dezember" abbrev="Dez"/>
<!-- You get the idea ... -->
   
<!-- Store element in variable for easy access -->
<xsl:variable name="date:months" select="document('')/*/date:month"/>
   
</xsl:stylesheet>
   
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:date="http://www.ora.com/XSLTCookbook/dates">
   
<xsl:include href="date-conversion.xsl"/>
   
<xsl:template name="date:get-month-name">
     <xsl:param name="month"/>
     <xsl:param name="country" select=" 'us' "/>
   
     <xsl:value-of select="$date:months[@country=$country and 
          @m=$month]/@name"/>
</xsl:template>
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset