12

我在我当前的项目中使用 xslt 转换。最初的 xslt 是用样式表 1.0 格式编写的。该项目在 Apache Tomcat 服务器上运行。在服务器的输出日志中,警告:

Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor

不断地从 Tomcat 打印到标准输出日志。我尝试将样式表版本号更改为“2.0”,但我的项目的某些部分在转换到转换器后没有得到正确的数据。我希望解决此问题的唯一原因是日志文件占用了太多内存空间。那么有人知道如何抑制特定Tomcat服务器的警告吗?最好抑制这一特定警告,但非常感谢任何意见。谢谢你。

4

4 回答 4

11

不能使用 XSLT 1.0 处理器运行转换吗?

如果答案是否定的,那么使用 XSLT 2.0 处理器运行 XSLT 1.0 转换不是一个好主意

我的建议是将 version 属性更改<xsl:stylesheet>为 2.0 并调试代码,以便产生正确的结果。这消除了警告以及向后兼容模式的任何不良副作用(例如仍然使用 XPath 2.0 XDM)。

于 2010-12-15T00:07:01.303 回答
5

如果您使用的是 Saxon 8+ XSLT 2.0 处理器,您可以在调用 Transformer 时抑制此警告,如下所示:

TransformerFactory tf = TransformerFactory.newInstance();
tf.setAttribute("http://saxon.sf.net/feature/version-warning", Boolean.FALSE);
Transformer t = tf.newTransformer();
t.transform(xmlSource, outputTarget);

如果您在 XMLUnit 中遇到错误,可以将 XSLT 版本设置为 2.0,如下所示:

XMLUnit.setXSLTVersion("2.0");

笔记:

对于命令行 Saxon 调用,像这样运行 Saxon:saxon -versionmsg:off

于 2011-12-29T15:54:50.383 回答
2

@rustyx 的答案是如果您使用的是 Saxon API。以防万一您或其他人需要命令行中的相同内容,请添加选项:

-versionmsg:关闭

于 2015-03-14T18:05:56.280 回答
1

如果您的样式表是使用 XSLT 1.0 版编写的并且您的解析器基于 XSLT 2.0,那么您将看到此警告消息。如果样式表是由您编写的,那么请尝试进行更改以使其与 XSLT 2.0 兼容。但是如果样式表不是由我编写的(在我的情况下它不是由我编写的),那么最简单的解决方案是抑制警告,这样它就不会膨胀你的日志文件。要禁止此版本警告,您必须将其设置为转换工厂的属性。FeatureKeys 定义了一组非常有用的常量。

TransformerFactory tFactory = TransformerFactory.newInstance();
tFactory.setAttribute(FeatureKeys.VERSION_WARNING, Boolean.FALSE);
于 2015-04-23T14:49:54.493 回答