Как выполнять Java-функции в XSLT - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь получить дату, используя пространство имен Java в файле XSLT, и минус 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 ()" в select, я получаю текущую дату в качестве вывода.Кажется, только функция minusDays () не работает.

Я ожидаю вывод, который является currentDate минус 2 дня в формате гггг-ММ-дд.Пример: если сегодняшняя дата 12 июня 2019 г. ВЫХОД: 2019-06-10

1 Ответ

1 голос
/ 12 июня 2019

Это допустимый вызов функции 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 для простой арифметики даты / времени становится ненужным.

...