1

我正在尝试解析 XSLT2.0/XPath2.0 中的日期字符串。问题是,日期不是标准格式,因此需要计算,而不仅仅是字符串操作。具体来说,日期以“yyyyDDD”的模式出现(是的,没错,年份后面是一年中的某一天)。

例如,2013051 == 2013 年 2 月 20 日

我一直在研究这个问题一段时间,并且发现了许多对我没有帮助的答案,例如:

  • 用子字符串解析日期:我需要从一年中的某一天开始计算月份和日期
  • date:parse-date: Saxon 不支持(我目前正在使用 SaxonEE 的评估版,如果可以添加对这个扩展功能的支持我愿意听!)
  • 使用脚本:我试图在 XSLT 中远离 MSXML/Javascript 以简化代码,如果可以避免的话,我想避免回到那里
  • 手动计算日期:这些天,你需要一个日期方面的博士学位才​​能把它们弄好……有太多的边缘案例让我觉得在这里重新发明轮子是安全的
  • 以标准格式将日期传递给 XSLT:回到经典程序员的困境,我无法控制此 XSLT 的输入。

Java 方法 Date.parse()正是我在这里所需要的,而且我发现很难相信在 XSLT 中没有处理日期的标准方法。

4

1 回答 1

3

XPath 2 没有特殊的解析功能,但它有很多用于日期时间计算的功能。

因此,您可以为一年中的第一天创建一个日期,然后为其添加日期偏移量。如果输入字符串是 in $input,只需在 XSLT 中插入这个 xpath 表达式:

xs:date(concat(substring($input, 1, 4), "-01-01")) + xs:dayTimeDuration(concat("P",number(substring($input,5, 3)) - 1, "D"))
于 2013-10-02T00:34:23.967 回答