在 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 位时,不允许前导零)

我的 dateOfBirth 值总是采用 mm-dd-yyyy 格式。

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

谢谢!

解决方法

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

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

(XSLT 3) 或

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

(XSLT 2 和 3)