XSLT標準庫中的日期函數

使用XSLT標準庫中的日期函數
日期名稱(Day name)
day name函數可以讓我們指定一個日期並返回該日期的名稱(比如星期一、星期二之類)。這可以使你的XML文檔更加規範,便於閱讀。
Listing A 是我們將要在本文中用到的XML文檔例子。Listing B 說明了day name函數在XSL stylesheet中的用法。
Listing A:
mydoc.xml
<?xml version="1.0" ?>
<MyDoc>
  <SomeDate>
    <Year>2003</Year>
    <Month>1</Month>
    <Day>1</Day> 
  </SomeDate>
  <SomeTime>
    <Hour>12</Hour>
    <Minute>30</Minute>
    <Second>00</Second>
    <TZ>-05:00</TZ>
  </SomeTime>
</MyDoc>
Listing B:
getday.xsl
<?xml version="1.0"  ?>
<xsl:stylesheet version="1.0"
    xmlns:xsl=http://www.w3.org/1999/XSL/Transform
    xmlns:dt="http://xsltsl.org/date-time">
<xsl:import href="http://xsltsl.sourceforge.net/modules/stdlib.xsl"/>
<xsl:template match="/">
  <MyDoc>
    <xsl:variable name="dow">
      <xsl:call-template name="dt:calculate-day-of-the-week">
        <xsl:with-param name="year" select="MyDoc/SomeDate/Year"/>
        <xsl:with-param name="month" select="MyDoc/SomeDate/Month"/>
        <xsl:with-param name="day" select="MyDoc/SomeDate/Day"/>
      </xsl:call-template>
    </xsl:variable>
    <DayOfWeek>
      <xsl:value-of select="$dow" />
    </DayOfWeek>
    <NameOfDay type="long">
      <xsl:call-template name="dt:get-day-of-the-week-name">
        <xsl:with-param name="day-of-the-week" select="$dow"/>
      </xsl:call-template>        
    </NameOfDay>
    <NameOfDay type="abbreviated">
      <xsl:call-template name="dt:get-day-of-the-week-abbreviation">
        <xsl:with-param name="day-of-the-week" select="$dow"/>
      </xsl:call-template>        
    </NameOfDay>
  </MyDoc>
</xsl:template>
</xsl:stylesheet>

這段代碼顯示了XSLT中三種不同的日期模板。首先,我們希望顯示日期的名字,然而模板返回的值只有一個,就是當天是一週中的第幾天。這個函數庫給我們提供了計算每週日子的模板(calculate-day-of-the-week)。

 
 
我們用這個模板來計算指定的日期到底是一週中的哪一天,將這個值存入XSL的變量,然後使用查找該日期名字的模板(get-day-of-the-week-name)得到實際的日期,在這個例子中,這個最終結果是星期三。

在Listing C 中我們會實現顯示星期縮寫的模板(get-day-of-the-week-abbreviation)

Listing C:

gotday.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyDoc xmlns:dt="http://xsltsl.org/date-time">
  <DayOfWeek>3</DayOfWeek>
  <NameOfDay type="long">Wednesday</NameOfDay>
  <NameOfDay type="abbreviated">Wed</NameOfDay>
</MyDoc>

日期和時間格式
XSLT標準庫中最有用的函數就是日期和時間格式函數了。這個函數允許你隨心所欲的修改日期和時間顯示格式。它有幾個輸入參數,比如日期、年份、月份以及時間變量。它還有一個格式參數用來指定輸出日期和時間的格式。

Listing D 顯示了一個XSL stylesheet使用格式函數的例子。在這個例子中,我們沒有指定特殊格式,這表示模板會按默認格式顯示。

Listing D: mydoc.xsl
<?xml version="1.0"  ?>
<xsl:stylesheet version="1.0"
    xmlns:xsl=http://www.w3.org/1999/XSL/Transform
    xmlns:dt="http://xsltsl.org/date-time">

<xsl:import href="http://xsltsl.sourceforge.net/modules/stdlib.xsl"/>

<xsl:template match="/">
  <MyDoc>
    <NewDateTime>
      <xsl:call-template name="dt:format-date-time">
        <xsl:with-param name="year" select="MyDoc/SomeDate/Year"/>
        <xsl:with-param name="month" select="MyDoc/SomeDate/Month"/>
        <xsl:with-param name="day" select="MyDoc/SomeDate/Day"/>
        <xsl:with-param name="hour" select="MyDoc/SomeTime/Hour"/>
        <xsl:with-param name="minute" select="MyDoc/SomeTime/Minute"/>
        <xsl:with-param name="second" select="MyDoc/SomeTime/Second"/>
        <xsl:with-param name="time-zone" select="MyDoc/SomeTime/TZ"/>
      </xsl:call-template>
    </NewDateTime>
  </MyDoc>
</xsl:template>

</xsl:stylesheet>

Listing E顯示了stylesheet的輸出結果:

Listing E: mynewdoc.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyDoc xmlns:dt="http://xsltsl.org/date-time">
  <NewDateTime>2003-01-01T12:30:00</NewDateTime>
</MyDoc>

我們可以通過定製格式參數來定製我們自己的格式。在格式參數中有很多可以制定的參數。比如你可以指定本地時間格式或者任意排列日期時間部分。關於參數設置的所有文檔都在網上都可以訪問到。

假設我們需要按以下格式顯示日期時間:

  Wednesday January 01, 2003

我們需要如下方法來使用format-date-time 模板:

      <xsl:call-template name="dt:format-date-time">
        <xsl:with-param name="year"
 select="MyDoc/SomeDate/Year"/>
        <xsl:with-param name="month"
 select="MyDoc/SomeDate/Month"/>
        <xsl:with-param name="day"
 select="MyDoc/SomeDate/Day"/>
        <xsl:with-param name="hour"
 select="MyDoc/SomeTime/Hour"/>
        <xsl:with-param name="minute"
 select="MyDoc/SomeTime/Minute"/>
        <xsl:with-param name="second"
 select="MyDoc/SomeTime/Second"/>
        <xsl:with-param name="time-zon"
 select="MyDoc/SomeTime/TZ"/>
        <xsl:with-param name="format" select="'%A %B %d,
 %Y'"/>
      </xsl:call-template>

在這個例子裏,%A表示星期的全名,%B表示月份的全名,%d表示該日期是一個月中的第幾天,%Y表示年份(四位數)。

更多選項

XSLT標準庫能夠大大增強你的XSL stylesheets功能。在XSLT 標準庫中還有另外一部分日期函數,不過大部分需要通過format-date-time函數實現。你可以通過訪問XSLT標準庫網站來獲取這些函數功能和參數介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章