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标准库网站来获取这些函数功能和参数介绍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值