【问题标题】:XSL - Transform DateXSL - 转换日期
【发布时间】:2018-06-24 17:57:02
【问题描述】:

我正在处理一个日期为 YYYY-MM-DDTHH:MM:SS 格式的 XML 文件,例如:

<NoteDate>2013-05-14T00:00:00</NoteDate>

我想将其转换为 AUS 日期格式 - DD/MM/YYYY - 作为我的 XSL 的一部分,当前执行如下原始导入:

<xsl:for-each select="Transactions">

<ROW MODID="" RECORDID="">
<COL><DATA><xsl:value-of select="Id"/></DATA></COL>
<COL><DATA><xsl:value-of select="NoteDate"/></DATA></COL>
<COL><DATA><xsl:value-of select="Reference"/></DATA></COL>
</ROW>

</xsl:for-each>

有没有办法可以将 XSL 中的 NoteDate 更改为所需的格式?

【问题讨论】:

  • 您使用什么 XSLT 版本?
  • w3.org/1999/XSL/Transform">
  • 重要的不是样式表中的版本号,而是您使用的处理器支持的 XSLT 版本。

标签: xml xslt


【解决方案1】:

使用这个 XSLT-1.0 sn-p:

<xsl:template match="/Transactions">
    <xsl:for-each select="NoteDate">
      <xsl:variable name="year"  select="substring-before(.,'-')" />
      <xsl:variable name="month" select="substring-before(substring-after(.,'-'),'-')" />
      <xsl:variable name="day"   select="substring-before(substring-after(substring-after(.,'-'),'-'),'T')" />
      <Date><xsl:value-of select="concat($day,'/',$month,'/',$year)"/></Date>
    </xsl:for-each>
</xsl:template>

输出:

<Date>14/05/2013</Date>

随意调整它以适应您自己的 XML 结构。

【讨论】:

    【解决方案2】:

    由于您使用的是XSLT 1.0,因此实现此目的的另一种方法是使用XSLT Extensions (EXSLT)。

    为了使用扩展,您需要在 XSLT 中包含适当的命名空间。在这种情况下,由于我们正在格式化日期,我们将使用以下命名空间

    xmlns:dt="http://exslt.org/dates-and-times"
    

    使用函数format-date,可以得到想要的格式。

    <formattedDate>
        <xsl:value-of select="dt:format-date(NoteDate,'dd/MM/yyyy')" />
    </formattedDate>
    

    输出

    <formattedDate>14/05/2013</formattedDate>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2013-02-23
      • 2017-09-01
      • 2012-05-24
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多