Xslt 日期转换YYYYMMDD到YYYY-MM-DD

Xslt 日期转换YYYYMMDD到YYYY-MM-DD,xslt,xpath,xslt-1.0,Xslt,Xpath,Xslt 1.0,我有一个格式为YYYYMMDD的日期字符串,例如20140330 在xsl 1.0中,我想将日期字符串转换为YYYY-MM-DD格式,例如2014-03-30 我尝试使用了几个日期函数,但都不起作用。 有人能帮我转换日期吗?您可以使用substring函数。给定以下输入XML: <root>20140330</root> XSLT1.0没有任何“日期函数”(与日期相关的函数是XPath2.0的一部分),您必须使用纯字符串操作。感谢您的响应。现在我将软件升级为使用xpat

我有一个格式为YYYYMMDD的日期字符串,例如20140330 在xsl 1.0中,我想将日期字符串转换为YYYY-MM-DD格式,例如2014-03-30

我尝试使用了几个日期函数,但都不起作用。
有人能帮我转换日期吗?

您可以使用substring函数。给定以下输入XML:

<root>20140330</root>

XSLT1.0没有任何“日期函数”(与日期相关的函数是XPath2.0的一部分),您必须使用纯字符串操作。感谢您的响应。现在我将软件升级为使用xpath 2,并尝试使用函数xp20:format dateTime('19711018','[Y0001]-[M01]-[D01'),但该函数不返回任何值。。我期待着1971年10月18日。。。不确定我是否遗漏了什么!!“我现在升级了我的软件以使用xpath 2”发布了一个新问题,谢谢。它起作用了。现在我尝试使用xpath函数。现在我将软件升级为使用xpath 2,并尝试使用函数xp20:format dateTime('19711018','[Y0001]-[M01]-[D01'),但该函数不返回任何值。。我期待着1971年10月18日。。。不确定我是否遗漏了什么@jayak-
format-dateTime()
是一个XSLT2.0函数;不是XPath。第一个参数必须是
xs:dateTime
。您正在尝试格式化日期,而不是日期时间。您应该改用
格式-date()
。但是,
format-date()
的第一个参数是
xs:date
。字符串
19711018
不能转换为xs:date。您必须使用
格式化日期(xs:date('1971-10-18'),'[Y0001]-[M01]-[D01]')
,这将返回
1971-10-18
。最好只使用字符串操作。(因为您现在使用的是2.0,所以可以这样做:
replace('19711018','(\d{4})(\d{2})(\d{2})',$1-$2-$3')
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

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

    <xsl:template match="root">
        <xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2))"/>
    </xsl:template>

</xsl:stylesheet>
2014-03-30