Xml xsl 1.0上的日期操作
我需要在变量中定义的给定日期前后3天,并将每个日期存储在xsl 1.0中新的单个变量中。 我不能使用任何扩展或第三方工具 通过论坛上的答案,我发现:对于一个类似的问题,但我不完全理解它是否以及如何应用于我的代码 Mi date变量采用标准日期时间格式,如下所示:Xml xsl 1.0上的日期操作,xml,datetime,xslt-1.0,operation,Xml,Datetime,Xslt 1.0,Operation,我需要在变量中定义的给定日期前后3天,并将每个日期存储在xsl 1.0中新的单个变量中。 我不能使用任何扩展或第三方工具 通过论坛上的答案,我发现:对于一个类似的问题,但我不完全理解它是否以及如何应用于我的代码 Mi date变量采用标准日期时间格式,如下所示: <xsl:variable name="Date" select="2014-05-13T00:00:00"/> 我需要输出一个类似以下内容的html: <table> <tr> &
<xsl:variable name="Date" select="2014-05-13T00:00:00"/>
我需要输出一个类似以下内容的html:
<table>
<tr>
<td>
2014-05-10
<td>
</tr>
<!---some rows with pricing information -->
</table>
<table>
<tr>
<td>
2014-05-11
<td>
</tr>
<!---some rows with pricing information -->
</table>
<table>
<tr>
<td>
2014-05-12
<td>
</tr>
<!---some rows with pricing information -->
</table>
<!-- etc -->
2014-05-10
2014-05-11
2014-05-12
在包含定价信息的行中,我必须使用每个单独的日期来执行其他操作,因此每天必须存储在一个变量中以供进一步使用
有没有办法做到这一点,只使用XSLT1.0
提前感谢。SAXON 6.5.5支持,但是没有实现将优雅地解决问题的日期:add-duration()
from
但是,您可以直接:
您还可以使用绑定外部Java类的捷径技术,将类名作为命名空间URI的一部分
使用快捷技术,名称空间的URI标识将在其中找到外部函数的类。命名空间URI必须是“java:
,后跟完全限定的类名(例如xmlns:date=“java:java.util.date”
)
引用from,Java中向日期添加天数的方法是
String dt = "2008-01-01"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
XSLT版本可能如下所示(未经测试):
关于从XPath与Java类和对象交互:
- 发件人:
- 如果存在具有正确名称的可用方法,系统函数
将返回true李>函数available(字符串名称)
- 如果方法是构造函数,则XPath值的类型为“wrapped Java object”。使用此函数的唯一方法是将其传递给另一个外部函数[…]
- 如果结果是任何其他Java对象(包括null),它将作为“包装的Java对象”返回
- 如果存在具有正确名称的可用方法,系统函数
- 从
- 可以直接调用静态方法
- 从)
- 实例级方法(即非静态方法)是通过提供Java Object类型的额外第一个参数来调用的,Java Object是要调用方法的对象
toString()
变成了to-string()
),所以我一直在这里使用它。也许calendar:set-time()
必须实际调用calendar:setTime()
,尝试一下并修复我的答案。SAXON 6.5.5支持,但没有实现date:add-duration()
但是,您可以直接:
您还可以使用绑定外部Java类的捷径技术,将类名作为命名空间URI的一部分
使用快捷技术,名称空间的URI标识将在其中找到外部函数的类。命名空间URI必须是“java:
,后跟完全限定的类名(例如xmlns:date=“java:java.util.date”
)
引用from,Java中向日期添加天数的方法是
String dt = "2008-01-01"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
XSLT版本可能如下所示(未经测试):
关于从XPath与Java类和对象交互:
- 发件人:
- 如果存在具有正确名称的可用方法,系统函数
函数available(字符串名称)
将返回true李>
- 如果方法是构造函数,则XPath值的类型为“wrapped Java object”。使用此函数的唯一方法是将其传递给另一个外部函数[…]
- 如果结果是任何其他Java对象(包括null),它将作为“包装的Java对象”返回
- 从
- 可以直接调用静态方法
- 从)
- 实例级方法(即非静态方法)是通过提供Java Object类型的额外第一个参数来调用的,Java Object是要调用方法的对象
我不确定方法名的格式。Saxon 6.5.5文档似乎暗示了虚线格式(toString()
变成了to-string()
),所以我一直在这里使用它。也许calendar:set-time()
必须实际调用calendar:setTime()
,尝试一下并修复我的答案。在纯XSLT 1.0中添加/减去日期的天数:
结果:
<?xml version="1.0" encoding="UTF-8"?>
<output>
<GivenDate>2014-05-13T00:00:00</GivenDate>
<NewDate>2014-05-10</NewDate>
</output>
2014-05-13T00:00:00
2014-05-10
--
请注意,givenDate的参数值是一个字符串,因此必须用单引号括起来。在纯XSLT 1.0中添加/减去日期前后的天数:
结果:
<?xml version="1.0" encoding="UTF-8"?>
<output>
<GivenDate>2014-05-13T00:00:00</GivenDate>
<NewDate>2014-05-10</NewDate>
</output>
2014-05-13T00:00:00
2014-05-10
--
请注意,givenDate的参数值是一个字符串,因此必须用单引号括起来。您使用的XSLT处理器是什么?最佳答案取决于此。(换句话说,您可以在另一个线程中使用答案,并根据您的需要调整答案,但是如果您能够访问某些sor的XSLT扩展,则会容易得多。)