xslt - 如何在xslt中执行java函数
问题描述
我正在尝试使用 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() 函数似乎不起作用。
我期待的输出是 yyyy-MM-dd 格式的 currentDate 减去 2 天。例如:如果今天的日期是 2019 年 6 月 12 日输出:2019-06-10
解决方案
这是一个有效的 XPath 函数调用:java:java.time.LocalDate.now(),Xalan 将其解释为对外部 Java 静态方法的调用。
然后用“.”跟随它。但 ”。” 不是 XPath 中的有效运算符。如果要将一个 XPath 函数应用于F()
另一个函数的结果G()
,则不能使用 Java 语法F().G()
,而必须使用 XPath 语法G(F())
。这意味着您需要使用与 minusDays() 对应的完全限定函数名。
由于您使用的是 Java,因此您可以切换到 Saxon,它支持 XSLT 2.0 中内置的所有日期和时间函数,因此所有这些调用 Java 来进行简单的日期/时间运算的操作都变得不必要了。
推荐阅读
- math - 为什么列表的所有子集的 XOR 具有相同的频率?
- linux - Pytorch 说 CUDA 不可用
- php - 邮递员原始数据有效,但表单数据不适用于 php 中的 POST 请求
- database - 检查用户是否保存在 Xamarin 的 SQLite 数据库中
- dart - 什么是 php 关联数组的 dart 等价物,以及如何将其存储在 Firestore 中?
- sql - 我的缺席函数 dosnt 正常工作 pgsql
- python - Python:将字典插入 Redis
- node.js - 将 Base64 上传到 Firebase 返回 413 状态码
- javascript - 如何在 azure cosmos 数据库中创建/更新大量记录
- python - 作者频道名称