2

我有大量的 XSLT 转换要迁移到新系统。为了便于回归测试,我通过这些转换运行了多个示例输入,并保留了输入/输出对以用于 JUnit 测试。

这工作了几天,直到突然间,其中一些测试失败了。故障的根源可追溯到日期转换 - 有时日期以月-日对的形式给出,并且根据该日期与今天日期的关系假设年份。因此,如果给定的日期是Oct. 1,则转换会突然返回Oct. 1, 20142013这是最初预期的时间。

当我阅读撒克逊文档时,我偶然发现了这个:http ://saxonica.com/documentation9.4-demo/html/using-xsl/commandline.html

-现在:yyyy-mm-ddThh:mm:ss+hh:mm

为转换设置 current-dateTime()(和 implicit-timezone())的值。这是为测试而设计的,以便获得可重复的结果以与参考结果进行比较,或者测试样式表是否可以处理重要的日期和时间,例如年终处理。

正是我所需要的,但不幸的是,我在 java 中运行这些转换(及其随附的单元测试),而不是从命令行。我环顾四周寻找某种转换器方法,也许是我可以设置的属性,但到目前为止什么也没看到。我可以重写所有转换以接受当前日期参数并以编程方式设置它,但不仅仅是为了测试目的。

tl; drcurrent-datetime()是否有任何选项可以强制从Java 中的撒克逊返回某个日期?

4

1 回答 1

3

Saxon API 中的相应选项是 Controller.setCurrentDateTime()。Controller 是 Saxon 对 JAXP Transformer 的实现,因此您可以向下转换 Transformer,或者在 s9api 中您可以从 XsltTransformer 对象获取它。

于 2013-10-24T21:04:09.990 回答