如何使用XSLT 2.0将String转换为Date YYYY-MM-DD

时间:2018-04-24 03:40:47

标签: xslt-2.0

我需要转换11/14/2016 - 这是字符串数据类型。我需要使用XSLT 2.0将其转换为2016-11-14。请告诉我怎么办?我不想使用subString方法。我尝试了xslt 2.0中的format-date()函数,但没有成功。

2 个答案:

答案 0 :(得分:0)

很抱歉,XSLT遵循ISO 8601,它应该是yyyy-mm-dd,因此subString将是您唯一的选择。

参考: https://www.w3.org/TR/xmlschema-2/#isoformats

答案 1 :(得分:0)

你可以这样做。如果您不想使用子字符串,则可以使用tokenize函数。

假设输入XML如:

<string>11/14/2016</string>

针对下面的样式表运行时:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <xsl:variable name="target_string">
            <xsl:value-of select="tokenize(string, '/')[last()]"/>
            <xsl:text>-</xsl:text>
            <xsl:value-of select="tokenize(string, '/')[1]"/>
            <xsl:text>-</xsl:text>
            <xsl:value-of select="tokenize(string, '/')[2]"/>
        </xsl:variable>
        <date1>
            <xsl:value-of select="xs:date($target_string)"/>
        </date1>
        <date2>
            <xsl:value-of select="format-date(xs:date($target_string), '[MNn] [D], [Y]')"/>
        </date2>
    </xsl:template>

</xsl:stylesheet>

产生

<date1>2016-11-14</date1><date2>November 14, 2016</date2>