xsl:choose: check the value of an attribute : choose « XSLT stylesheet « XML Tutorial






File: Data.xml
<?xml version = "1.0"?>
<planner>
   <year value = "2000">

      <date month = "7" day = "15">
         <note time = "1430">meeting</note>
         <note time = "1620">course</note>
      </date>

      <date month = "7" day = "4">
         <note>Independence Day</note>
      </date>

      <date month = "7" day = "20">
         <note time = "0900">Meeting A</note>
      </date>

      <date month = "7" day = "20">
         <note time = "1900">Meeting B</note>
      </date>

      <date month = "7" day = "20">
         <note time = "1300">Meeting C</note>
      </date>

   </year>

</planner>


File: Transform.xslt
<?xml version = "1.0"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <html>

      <body>
        Appointments
        <br />
        <xsl:apply-templates select="planner/year" />
      </body>

    </html>
  </xsl:template>

  <xsl:template match="year">
    <strong>Year:</strong>
    <xsl:value-of select="@value" />
    <br />
    <xsl:for-each select="date/note">
      <xsl:sort select="../@day" order="ascending"
        data-type="number" />
      <strong>
        Day:
        <xsl:value-of select="../@day" />
        /
        <xsl:value-of select="../@month" />
      </strong>
      <br />

      <xsl:choose>

        <xsl:when
          test="@time &gt; '0500' and @time &lt; '1200'">
          Morning (
          <xsl:value-of select="@time" />
          ):
        </xsl:when>

        <xsl:when
          test="@time &gt; '1200' and @time &lt; '1700'">
          Afternoon (
          <xsl:value-of select="@time" />
          ):
        </xsl:when>

        <xsl:when
          test="@time &gt; '1200' and @time &lt; '1700'">
          Evening (
          <xsl:value-of select="@time" />
          ):
        </xsl:when>

        <xsl:when
          test="@time &gt; '1200' and @time &lt; '1700'">
          Night (
          <xsl:value-of select="@time" />
          ):
        </xsl:when>

        <xsl:otherwise>Entire day:</xsl:otherwise>

      </xsl:choose>

      <xsl:value-of select="." />

      <xsl:if test=". = ''">n/a</xsl:if>

      <br />
    </xsl:for-each>

  </xsl:template>

</xsl:stylesheet>

Output:

<html>
   <body>
              Appointments
              <br><strong>Year:</strong>2000<br><strong>
                 Day:
                 4
                 /
                 7</strong><br>Entire day:Independence Day<br><strong>
                 Day:
                 15
                 /
                 7</strong><br>
                Afternoon (
                1430
                ):
              Doctor's appointment<br><strong>
                 Day:
                 15
                 /
                 7</strong><br>
                Afternoon (
                1620
                ):
              course<br><strong>
                 Day:
                 20
                 /
                 7</strong><br>
                Morning (
                0900
                ):
              Meeting A<br><strong>
                 Day:
                 20
                 /
                 7</strong><br>Entire day:Party at Joe's<br><strong>
                 Day:
                 20
                 /
                 7</strong><br>
                Afternoon (
                1300
                ):
              Meeting C<br></body>
</html>








5.43.choose
5.43.1.choose statement
5.43.2.xsl:choose, xsl:when and xsl:otherwise
5.43.3.xsl:choose: check the value of an attribute
5.43.4.choose with otherwise statement
5.43.5.when test="position() mod 4 = 0"
5.43.6.Change style for even and odd
5.43.7.xsl:choose element is used for selection between several possibilities