我有大量的XSLT转换,我正在迁移到新系统。为了便于回归测试,我通过这些转换运行了多个示例输入,并保持输入/输出对在JUnit测试中使用。
这种情况好几天,直到突然,其中一些测试失败了。失败的根源被追溯到日期转换 - 有时日期以月 - 日对形式给出,并且年份基于该日期与今天日期的关系来假定。因此,如果给定日期为Oct. 1
,那么当最初预期Oct. 1, 2014
时,变换会突然返回2013
。
在我阅读Saxon文档时,我偶然发现了这一点:http://saxonica.com/documentation9.4-demo/html/using-xsl/commandline.html
-now:YYYY-MM-DDTHH:MM:SS + HH:MM
为转换设置current-dateTime()(和implicit-timezone())的值。这是为测试而设计的,可以获得可重复的结果,以便与参考结果进行比较,或者测试样式表是否可以处理重要的日期和时间,例如年终处理。
这是完全我需要的东西,但不幸的是,我在java中运行这些变换(及其附带的单元测试),而不是从命令行运行。我四处寻找某种变换器方法,也许是我可以设置的属性,但到目前为止还没有看到任何东西。我可以重写所有转换以接受当前日期参数并以编程方式设置,但不仅仅是为了测试目的。
tl; dr 是否有任何选项可以强制从Java中的Saxon current-datetime()
强制返回某个日期?
答案 0 :(得分:2)
Saxon API中的相应选项是Controller.setCurrentDateTime()。 Controller是Saxon对JAXP Transformer的实现,因此您可以向下转换Transformer,或者在s9api中,您可以从XsltTransformer对象获取它。