SaxonApiException:提供的节点已通过架构验证,但是XPath表达式在编译时没有架构感知

时间:2018-07-15 23:13:45

标签: java xpath schema saxon

我刚刚从Saxon EE 9.6.0.4升级到9.8.0.12,现在在以下代码上,我在调用setContextItem()时遇到异常

.header

我如下创建xpath对象:

transition: height 0.25s ease-in-out;

在这种情况下,我需要做些什么?

谢谢-戴夫

1 个答案:

答案 0 :(得分:0)

您需要设置

compiler.SchemaAware = true;

之所以引入检查(和错误消息),是因为在这种情况下,较早的发行版会产生不正确的结果:将SchemaAware属性设置为false,优化程序会假设所有雾化的内容均为xs:untypedAtomic,如果输入文档已通过架构验证,则这是不正确的。更改优化程序以消除此假设将导致所有不了解模式的XPath用户(即大多数用户)的性能下降。

请注意,如果您要使用XPath查询类型化的数据,那么最好是XPath编译器有权访问该模式,因此它实际上可以利用输入数据的事实。但是,此操作的范围是有限的,因为XPath API与XQuery中的XQueryCompiler.ContextItemType属性不等效,它允许静态声明上下文项的类型。因此,在实践中,XPath编译器将无法基于架构信息进行许多静态推断(或检测到许多错误)。