在 XSLT 中转换日期时间

Converting Date Time in XSLT

我正在尝试使用 xslt 将日期转换为 yyyy/mm/dd 格式。


"dateOfBirth": "</xsl:text><xsl:value-of select="format-date(dateOfBirth, '[Y0001]/[M01]/[D01]')" /><xsl:text>",

但是我收到了这个错误

无法使用提供的 XML/XSL 输入生成 XML 文档。无效日期“01/21/1950”(当年份超过 4 位时,不允许有前导零)

我的出生日期值始终采用 mm-dd-yyyy 格式。

谁能告诉我我做错了什么?我在Whosebug上搜索了各种答案,主要是字符串替换。由于我的 xml 中有大约 10 个日期,是否有任何一种线性方法可以这样做,或者是否有任何内置函数可以这样做。 感谢任何帮助。

谢谢!

如果您在 Saxon 9 中使用 XSLT 2 或 3,您始终可以使用 xsl:function 编写自己的 XSLT 函数,例如

$input => replace('([0-9]{2})/([0-9]{2})/([0-9]{4})', '--') => xs:date() => format-date('[Y0001]/[M01]/[D01]')

(XSLT 3) 或

format-date(xs:date(replace($input, '([0-9]{2})/([0-9]{2})/([0-9]{4})', '--')), '[Y0001]/[M01]/[D01]')

(XSLT 2 和 3)