XSLT日期转换 - 数据格式更改

时间:2012-04-20 00:41:31

标签: xslt

以某种可读格式在HTML中显示/输出日期的选项是什么。我的意思是,如果我只是显示date_last_activity的值,它看起来很奇怪:S 所以我的问题是,XSLT是否提供任何日期格式转换?

XML:

<date_last_activity format="MMDDCCYY">04132012</date_last_activity>

XLS模板:

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

HTML:

04132012

宁愿它看起来像04/13/2012 ......

我在XSLT上做了很多,我想可以制作“template”=&gt; formatDate ...但不知道从哪里开始:S

3 个答案:

答案 0 :(得分:4)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="date_last_activity">
  <xsl:value-of select=
  "concat(
     substring(.,
               string-length(substring-before(@format, 'MM'))+1,
               2
               ),
     '/',
     substring(.,
               string-length(substring-before(@format, 'DD'))+1,
               2
               ),
     '/',
     substring(.,
               string-length(substring-before(@format, 'CCYY'))+1,
               4
               )

         )"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档时:

<date_last_activity format="MMDDCCYY">04132012</date_last_activity>

会产生想要的正确结果:

04/13/2012

将相同的转换应用于以下XML文档时:

<date_last_activity format="CCYYDDMM">20121304</date_last_activity>

产生相同的正确结果:

04/13/2012

答案 1 :(得分:1)

如果您需要在多个地方执行此操作,请在xsl中的某处创建命名模板

编辑:由于格式错误而未显示模板...

<xsl:template name="formats_date">
  <xsl:param name="raw_date" />
  <xsl:value-of select="concat( substring( $raw_date, 0, 2 ), '/', substring( $raw_date, 2, 2 ), '/', substring( $raw_date, 4 ) )" />
</xsl:template>

然后将其应用为

<xsl:call-template name="formats_date">
    <xsl:with-param name="raw_date" select="date_last_activity" />
</xsl:call-template/>

否则你可以直接在你需要的地方做xsl:value-of concat ...的东西

答案 2 :(得分:1)

XSLT 2.0提供函数format-date()。但是,在使用之前,您需要将日期转换为ISO格式,YYYY-MM-DD,这可以使用concat和substring来完成。

如果你仍然坚持使用XSLT 1.0,那么www.exslt.org上有一个日期处理函数和模板库。