【问题标题】:Parsing a non-standard date string in XSLT在 XSLT 中解析非标准日期字符串
【发布时间】:2013-10-08 02:14:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: xslt-2.0 saxon xpath-2.0


    【解决方案1】:

    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"))
    

    【讨论】:

    • 我喜欢这个解决方案的一切,尤其是它完美运行的事实!只是告诉你,有时你需要从不同的角度看待问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多