XSL - 转换日期

时间:2018-01-16 04:44:17

标签: xml xslt

我正在使用日期为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更改为所需的格式?

2 个答案:

答案 0 :(得分:1)

使用此XSLT-1.0代码段:

<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结构。

答案 1 :(得分:0)

由于您使用的是XSLT 1.0,另一种方法是使用 XSLT扩展程序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>