将日期转换为XSLT

时间:2018-01-06 18:23:32

标签: xslt

我在这种格式的XML文件中有一个日期(字符串)值:

<UserValue title="fnd0EndDate" value="2017-01-18T09:18:19Z" />

我想使用XSL转换将字符串/日期转换为以下格式:

01JAN2017:09:18:19

我如何在XSL转换中执行此操作?

1 个答案:

答案 0 :(得分:2)

使用 XSLT 2.0(或3),可以像将{date}值评估为xs:dateTime并使用format-dateTime()所需的图片一样简单:

format-dateTime(xs:dateTime(UserValue/@value), '[M01][MN,*-3][Y]:[H01]:[m01]:[s01]')

但是,使用 XSLT 1.0 ,您没有可用的dateTime方法,而是降级为字符串解析:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="1.0">
  <xsl:output method="text"/>
  <xsl:variable name="MONTHS">
    <month>JAN</month>
    <month>FEB</month>
    <month>MAR</month>
    <month>APR</month>
    <month>MAY</month>
    <month>JUN</month>
    <month>JUL</month>
    <month>AUG</month>
    <month>SEP</month>
    <month>OCT</month>
    <month>NOV</month>
    <month>DEC</month>
  </xsl:variable>
  <xsl:template match="/">
    <xsl:variable name="val" select="//UserValue/@value"/>
    <xsl:variable name="month" select="substring($val, 6, 2)"/>
    <xsl:variable name="month-name" select="document('')/*/*/month[position() = number($month)]"/>
    <xsl:variable name="year" select="substring($val, 1, 4)"/>
    <xsl:variable name="time" select="substring($val, 12, 8)"/>

    <xsl:value-of select="concat($month, $month-name, $year, ':', $time)"/>
  </xsl:template>
</xsl:stylesheet>