我正在尝试使用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
答案 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。