2

以某种可读格式在 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

宁愿它看起来像 2012 年 4 月 13 日...

我读了很多关于 XSLT 的文章,我想可以制作“模板”=> formatDate ...但不知道从哪里开始:S

4

3 回答 3

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
于 2012-04-20T04:27:33.593 回答
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... 的东西

于 2012-04-20T00:55:33.310 回答
1

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

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

于 2012-04-20T07:44:57.320 回答