XSLT如何获取当前日期和时间 EXSLT日期函数

3次阅读

XSLT 1.0 无内置当前日期时间函数,需通过 EXSLT date:dateTime() 扩展或外部传参实现;XSLT 2.0+ 支持 current-date()、current-time() 和 current-dateTime() 原生函数。

XSLT如何获取当前日期和时间 EXSLT日期函数

在标准 XSLT 1.0 中,没有内置函数可以直接获取当前日期和时间。`current-date()`、`current-time()` 和 `current-dateTime()` 是 XSLT 2.0+ 的函数,XSLT 1.0 不支持。但可通过 EXSLT 扩展或处理器特定机制实现。

使用 EXSLT date:dateTime() 函数(推荐)

EXSLT 是一套广泛支持的 XSLT 扩展库,其中 date 模块提供了 date:dateTime(),可返回当前日期时间字符串(格式如 2024-05-22T14:30:45)。

使用前需声明命名空间并确保处理器支持 EXSLT(如 libxslt、Saxon 6.x、Xalan-J 等):

然后在模板中调用:

注意:
– 返回值是字符串,不是 XPath 时间类型,无法直接计算;
– 部分旧版处理器(如 MSxml)默认不启用 EXSLT,需手动注册或配置扩展;
– 若结果为空,说明处理器未启用该扩展。

替代方案:通过参数传入当前时间

更可靠、可移植的方式是**由调用方(如 Java、Python 或命令行工具)将当前时间作为参数传入 XSLT**:

  • XSLT 中声明参数:
  • 在 Java(Xalan)中设置:
    transformer.setParameter("now", new SimpleDateformat("yyyy-MM-dd'T'HH:mm:ss").format(new Date()));
  • 在命令行(xsltproc)中:
    xsltproc --stringparam now "$(date -Iseconds)" style.xsl doc.xml

这种方式完全脱离处理器扩展依赖,适合生产环境。

检查处理器是否支持 EXSLT date 函数

可添加一个简单测试模板验证:

               

支持 date:dateTime:

不支持 EXSLT date 扩展

若输出“不支持”,应改用参数方式或升级到 XSLT 2.0+ 处理器(如 Saxon-HE)。

XSLT 2.0/3.0 直接使用内置函数

若可升级处理器,XSLT 2.0 起原生支持:

  • current-date() → 返回 xs:date,如 2024-05-22
  • current-time() → 返回 xs:time,如 14:30:45.123+08:00
  • current-dateTime() → 返回 xs:dateTime,如 2024-05-22T14:30:45.123+08:00

无需命名空间,开箱即用,且支持格式化(format-dateTime())和时区处理。

text=ZqhQzanResources