使用XSLT进行日期格式转换
发布于: August 10, 2009, 10:53 am 分类: HTML/CSS/JavaScript 作者: Saturn 0 个评论
现在有个问题需要用XSLT来实现,那就是在XSLT中如何将一个日期结点的格式由YYYY-MM-DD转换到DD/MM/YYYY?
我首先想到的就是利用XSLT中的带参数的模板,将此原始日期作为参数参数一个模板中,然后进行重新组合。说起来晕乎乎,还是直接进入实战吧。
假设现在有一个XML文档,内容如下:
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="format_date.xsl"?> <notebooks> <notebook> <title>红花还需绿叶衬,我是标题一</title> <date>2009-08-11</date> </notebook> <notebook> <title>红花还需绿叶衬,我是标题二</title> <date>2009-08-10</date> </notebook> </notebooks>
在这个文档中,结点的日期为2009-08-11,即格式为YYYY-MM-DD,现在我们需要利用XSLT将其转换成DD/MM/YYYY,也就是11/08/2009。
关于实现思路,我在上面已经讲到,不再赘述。这里讲讲具体实现,一个带参数的XSLT模板:
<xsl:template name="FormatDate">
<!--Convert Old Date Format:yyyy-mm-dd to New Date Format: dd/mm/yyyy-->
<xsl:param name="DateTime" />
<xsl:variable name="y">
<xsl:value-of select="substring($DateTime,1,4)" />
</xsl:variable>
<xsl:variable name="m_temp">
<xsl:value-of select="substring-after($DateTime,'-')" />
</xsl:variable>
<xsl:variable name="m">
<xsl:value-of select="substring($m_temp,1,2)" />
</xsl:variable>
<xsl:variable name="d_temp">
<xsl:value-of select="substring-after($m_temp,'-')" />
</xsl:variable>
<xsl:variable name="d">
<xsl:value-of select="substring($d_temp,1,2)" />
</xsl:variable>
<xsl:value-of select="$d"/>
<xsl:value-of select="'/'"/>
<xsl:value-of select="$m"/>
<xsl:value-of select="'/'"/>
<xsl:value-of select="$y"/>
</xsl:template>
如果对XSLT有所了解,相信上面的代码非常直观;如果不太了解,那么首先你应该去了解,或者在下面留言……
在XSLT中,我一直将模板当作其他程序语言中的函数。理解了这一点,上面这段程序就很好理解了,那个参数Datetime就像是程序语言中的入口参数,用来接受外部送给这个“函数”的参数。
需要注意的地方是,上面的19-23行,这是最后对日期各个部分(年、月、日)进行组合。换言之,你可以组合出任意你可以想出的日期格式,不限于此。
但这里只写了“函数”了部分,没有提到调用,调用方法如下:
<xsl:call-template name="FormatDate"> <xsl:with-param name="DateTime" select="date"/> </xsl:call-template>
在此例中,我将date这个结点的值传给了“函数”的参数。