如何在 XSLT Saxon 模板中注入 java 值?

How to inject a java value in XSLT Saxon template?

我正在使用 Saxon-HE(免费家庭版)用 XSLT 解析 XML 个文件。现在我想将一个静态值(应用程序启动的时间戳)注入到 xslt 模板中。这样模板的每个运行都使用相同的时间戳。

这可能吗?

使用静态参数

<xsl:param name="appStartTime" as="xs:dateTime" 
           static="yes" select="current-dateTime()"/>

您可以使用 xsltCompiler.setParameter(QName, XdmValue) 为参数提供一个值,否则它将默认为编译样式表的 date/time。

您可以使用 $appStartTime.

以与任何其他变量引用相同的方式引用模板主体中的参数

对于无命名空间的参数名称,可以提供 QName,例如 new QName("appStartTime").

您的 XdmValue 将是包含日期的 XdmAtomicValue。从 Java LocalDate 开始,在 Saxon 9.9 中,构造它的最佳方法可能是使用 new net.sf.saxon.DateValue(year, month, day)LocalDate 中提取字段,然后提供此 DateValueXdmAtomicValue.makeAtomicValue(Object).