我似乎找不到与我的XSLT 2.0转换相关的问题的解决方案。 这是源XML:
<reportInterval>
<startDate>01.07.2016</startDate>
</reportInterval>
这是XSLT转换表的一部分:
<xsl:attribute name="per_start">
<xsl:value-of select="format-date(reportInterval/startDate, '[Y0001]-[M01]-[D01]')"/>
</xsl:attribute>
错误如下:
Error at char 25 in xsl:value-of/@select on line 17 column 116 of Transactions.xsl:
FORG0001: Invalid date "01.07.2016" (When year exceeds 4 digits, leading zeroes are not allowed)
in built-in template rule
我认为这与XSL无法理解提供的日期String
这一事实有关。有没有其他方法可以进行所需的转换?
提前致谢!
答案 0 :(得分:2)
如果你认为这是纯粹的字符串操作,你可以做这样的事情......
<xsl:value-of select="replace(reportInterval/startDate, '(\d{2})\.(\d{2})\.(\d{4})', '$3-$2-$1')"/>
这将返回&#34; 2017-07-01&#34;。
如果你想把它作为日期转换,并输出其他格式,那么请考虑这个XSLT ......
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<date>
<xsl:variable name="date" select="replace(reportInterval/startDate, '(\d{2})\.(\d{2})\.(\d{4})', '$3-$2-$1')"/>
<xsl:attribute name="per_start">
<xsl:value-of select="format-date(xs:date($date), '[MN] [D01], [Y0001]')"/>
</xsl:attribute>
</date>
</xsl:template>
</xsl:transform>