如何在xslt

时间:2019-06-12 09:55:09

标签: xslt xslt-1.0

我正在尝试使用XSLT文件中的java名称空间获取日期,并从中减去X天。如何从xslt中减去从日期开始的天数?

我尝试使用Java名称空间获取当前日期并使用 java.time.LocalDate.now()。minusDays(2)的天数。 在Java中工作正常,但在xslt中失败

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                              xmlns:xs="http://www.w3.org/2001/XMLSchema"
                              xmlns:java="http://xml.apache.org/xslt/java" 
                              xmlns:xalan="http://xml.apache.org/xalan"
                              xmlns:fn="http://www.w3.org/2005/xpath-functions"
                              xmlns:datetime="http://exslt.org/dates-and-times"
                              xmlns:math="http://exslt.org/math"
                              xmlns:date="http://www.date.org/"
                              xmlns:exslt="http://exslt.org/common"
                              xmlns:js="javascript:code"
                              exclude-result-prefixes="java"
                              extension-element-prefixes="mcr">

    <xsl:variable name="test" select="java:java.time.LocalDate.now().minusDays(2)"/>

当我仅在选择中使用“ java:java.time.LocalDate.now()”时,我正在获取今天的日期作为输出。似乎只有minusDays()函数不起作用。

我期望的输出是currentDate减去2天 格式为yyyy-MM-dd。 例如:如果今天的日期是2019年6月12日 输出:2019-06-10

1 个答案:

答案 0 :(得分:1)

这是有效的XPath函数调用:java:java.time.LocalDate.now(),Xalan将此解释为对外部Java静态方法的调用。

然后在其后加上“。”。但是“。”在XPath中不是有效的运算符。如果要将一个XPath函数F()应用于另一个函数G()的结果,则不能使用Java语法F().G(),而必须使用XPath语法{{1} }。这意味着您需要使用与minusDays()相对应的标准函数名称。

由于您使用Java,因此可以切换到Saxon,它支持XSLT 2.0内置的所有日期和时间功能,因此无需为了简单的日期/时间算术而全部调用Java。