java - 升级 saxon 到 9.5.1.8 后出现警告消息

标签 java xml saxon

我们正在将 saxon 9.3.0.2 升级到 saxon ee-9.5.1.8,升级完成后我们收到很多警告

net.sf.saxon.trans.XPathException: The source document is in namespace [MY-NAME-SPACE] , but none of the template rules match elements in this namespace
    at net.sf.saxon.Controller.warning(Controller.java:954)
    at net.sf.saxon.Controller.transformDocument(Controller.java:2081)
    at net.sf.saxon.Controller.transform(Controller.java:1911)

我从 xsl 中删除了命名空间,但仍然收到此警告 有谁知道发生了什么事吗?如何消除这个警告?

最佳答案

首先要做的是确定警告是否为误报。

该警告被添加到 Saxon 中,因为有很多人犯同样的错误(大约每天都有一个人在 StackOverflow 上问这个问题,天知道有多少人在默默受苦)。特别是,错误在于有这样的源文档:

<foo xmlns="http://default.namespace.com/">
  <bar/>
  <baz/>
</foo>

然后编写匹配模式,例如

<xsl:template match="foo"/>
<xsl:template match="bar"/>

它永远不会匹配任何东西,因为它们忽略 namespace 。

所以撒克逊人所做的是这样的:如果

(a) 源文档的最外层元素位于命名空间中

(b) 样式表中有与特定元素名称匹配的模板规则

(c) 样式表匹配的元素的命名空间与源文档中实际出现的命名空间之间没有交集

然后它输出此警告。

如果确实是误报,有几种方法可以抑制它:

(a) 在样式表中添加一个虚拟模板规则,可能带有一个谓词,这意味着它永远不会匹配任何内容,但它使用源文档的命名空间,只是为了告诉处理器您知道自己在做什么。

(b) 设置配置属性 FeatureKeys.SUPPRESS_XSLT_NAMESPACE_CHECK,可以在 API 中执行以下操作:

import net.sf.saxon.s9api.Processor;
import net.sf.saxon.s9api.XsltCompiler;

Processor processor = new Processor(configuration);
processor.setConfigurationProperty(FeatureKeys.SUPPRESS_XSLT_NAMESPACE_CHECK, "true");
XsltCompiler xsltCompiler = processor.newXsltCompiler();

或者从命令行添加 --suppressXsltNamespaceCheck:on

如果这是误报,我很想查看详细信息,以便我们可以完善检查。我们确实知道,在某些情况下,条件可以非常合法地发生,例如,当您的初始源文档是要处理的文件的简单列表,并且样式表的所有实际工作都是在处理这些文件时;但我们认为少量的误报是值得的,这样可以避免初学者在解决这个简单而常见的问题时遇到挫败感。

关于java - 升级 saxon 到 9.5.1.8 后出现警告消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33256226/

相关文章:

Java 图形用户界面 : Getting started?

java - 关闭窗口 - 但不要停止程序 - JAVA

java - javafx 接口(interface)中的结构项

xml - Coldfusion - XML pretty-print

java - XQuery Saxon 异常 (java.lang.IllegalArgumentException)

java - 有没有办法在basex中使用saxon作为xquery处理器?

java - 是否可以使用gwt java开发离线aaplication

python - 使用 elementtree.find() 无法找到子叶子

c# - 有没有一种快速的方法来格式化 XmlDocument 以便在 C# 中显示?

java - Oxygen XML 编辑器和 Saxon 扩展功能