我正在尝试通过Saxon 9.7.0-14EE和xmlbeans-2.6.0 / xmlbeans- XPath -2.6.0在我的Web应用程序中使用xpath
Movement mov = (Movement) XPathUtils.executeQueryNoResultNull(message.getPayload(), "//trx:Movement [@tipo='RESTO']");使用
public static XmlObject executeQueryNoResultNull(XmlObject source, String query) {
XmlObject[] results = source.selectPath(DECLARE_NS + "$this" + query);
if (results.length == 0) {
return null;
} else {
return results[0];
}
}我有这个错误
java.lang.RuntimeException: Trying XBeans path engine... Trying XQRL... Trying XDK... Trying delegated path engine... FAILED on declare namespace trx='http://www.test.com/xxx/xx/trx';$this//trx:Movement[@tipo='RESTO']
at org.apache.xmlbeans.impl.store.Path.getCompiledPath(Path.java:185)
at org.apache.xmlbeans.impl.store.Path.getCompiledPath(Path.java:136)
at org.apache.xmlbeans.impl.store.Cursor._selectPath(Cursor.java:902)
at org.apache.xmlbeans.impl.store.Cursor.selectPath(Cursor.java:2634)
at org.apache.xmlbeans.impl.values.XmlObjectBase.selectPath(XmlObjectBase.java:476)
at org.apache.xmlbeans.impl.values.XmlObjectBase.selectPath(XmlObjectBase.java:460)问题是XMLBeans吗?我可以只使用Saxon并删除XMLBeans吗?
这是我的module.xml
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="app-common">
<resources>
<resource-root path="jsr173_1.0_api.jar"/>
<resource-root path="resolver.jar"/>
<resource-root path="xbean_xpath.jar"/>
<resource-root path="saxon9ee.jar"/>
<resource-root path="saxon9-dom.jar"/>
<resource-root path="xmlbeans-2.6.0.jar"/>发布于 2019-04-18 02:00:21
对于XMLBeans版本3.1.0,我成功使用的SaxonHE的最新版本是9.2.1-5。版本9.3及更高版本的任何内容都会触发您已经看到的错误,即尝试查找可以处理带有谓词的查询的XPath引擎失败。XMLBeans文档说明了查询在没有谓词的情况下工作的原因:
默认情况下,XMLBeans仅支持非常简单的XPath表达式。要执行复杂的表达式--比如那些带有谓词、函数调用等的表达式--您需要在类路径中使用xbean_xpath.jar和Saxon jars (如下所示)。
在XMLBeans 3.x中,您不需要包含xbean_xpath.jar (这些类包含在xmlbeans-3.1.0.jar中),尽管文档尚未更新以反映这一点。
发布于 2017-02-03 17:47:07
我不是XMLBeans方面的专家,但我想知道问题是否在于"XPath“表达式
declare namespace trx='http://www.test.com/xxx/xx/trx';$this//trx:Movement[@tipo='RESTO']
是不是真的XPath (因为‘声明命名空间’),因此不能与第三方XPath引擎一起工作?
https://stackoverflow.com/questions/41958924
复制相似问题