正在查看: 标记有标签 转换 的文章(第 1 页 / 共 1 篇)

使用XSLT进行日期格式转换

现在有个问题需要用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这个结点的值传给了“函数”的参数。

完整的XSLT文件和最后的结果请分别这里这里