在XSLT中解析非标准日期字符串

时间:2013-10-01 19:31:13

标签: xslt-2.0 saxon xpath-2.0

我试图在XSLT2.0 / XPath2.0中解析日期字符串。问题是,日期不是标准格式,因此需要计算,而不仅仅是字符串操作。具体而言,日期的格式为“yyyyDDD”(是的,这是正确的,一年后面是一年中的某一天)。

例如,2013051 = 2013年2月20日

我一直在研究这个问题,并找到了许多对我没有帮助的答案,例如:

  • 用子字符串解析日期:我需要计算月份和时间一年中的一天
  • 日期:解析日期:Saxon不支持(我目前正在使用SaxonEE的评估版,如果可以添加对此扩展功能的支持,我愿意听!)
  • 使用脚本:我试图摆脱XSLT中的MSXML / Javascript以试图简化代码,并且如果我可以避免,我想避免回到那里
  • 手工计算日期:这些天,你需要一个博士日期才能使它们正确...有太多的边缘情况让我觉得安全重新发明轮子
  • 以标准格式将日期传递给XSLT:为了回到经典程序员的困境,我无法控制这个XSLT的输入。

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

1 个答案:

答案 0 :(得分:3)

XPath 2没有特殊的解析函数,但它有许多日期时间计算的函数。

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

xs:date(concat(substring($input, 1, 4), "-01-01")) + xs:dayTimeDuration(concat("P",number(substring($input,5, 3)) - 1, "D"))