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

在标准 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 等):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date">
然后在模板中调用:
<xsl:value-of select="date:dateTime()" />
注意:
- 返回值是字符串,不是 XPath 时间类型,无法直接计算;
- 部分旧版处理器(如 MSXML)默认不启用 EXSLT,需手动注册或配置扩展;
- 若结果为空,说明处理器未启用该扩展。
替代方案:通过参数传入当前时间
更可靠、可移植的方式是**由调用方(如 Java、Python 或命令行工具)将当前时间作为参数传入 XSLT**:
- XSLT 中声明参数:
<xsl:param name="now" select="'2024-05-22T14:30:45'" />
- 在 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
这种方式完全脱离处理器扩展依赖,适合生产环境。
本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。
检查处理器是否支持 EXSLT date 函数
可添加一个简单测试模板验证:
<xsl:template match="/">
<xsl:choose>
<xsl:when test="function-available('date:dateTime')">
<p>支持 date:dateTime:<xsl:value-of select="date:dateTime()" /></p>
</xsl:when>
<xsl:otherwise>
<p>不支持 EXSLT date 扩展</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>若输出“不支持”,应改用参数方式或升级到 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())和时区处理。









