无法将xs:string与xs:integer比较

时间:2018-07-20 05:30:43

标签: java xpath talend saxon

当前在Talend上运行代码会引发此错误

  

net.sf.saxon.trans.XPathException:无法将xs:string与   xs:integer at   net.sf.saxon.expr.GeneralComparison.typeCheck(GeneralComparison.java:255)

将saxon 9添加到配置中,但是将其删除时,它可以正常工作。任何想法为何会干扰xpath

1 个答案:

答案 0 :(得分:1)

确切地说,您将Saxon的哪个版本添加到配置中?

在Saxon 9.6之前,Saxon jar文件包含一个清单,指示该清单是JAXP XPath服务提供者。结果,任何尝试使用JAXP工厂方法(XPathFactory.newInstance())创建XPath提供程序的应用程序代码都会碰巧在类路径上使用Saxon。不幸的是,JAXP API不够严格,因此所有XPath提供程序都是可互换的。特别是,您无法说需要XPath 1.0引擎而不是XPath 2.0或XPath 3.1引擎。结果(正如我所猜测的那样),假设XPath 1.0行为(例如在比较中将整数自动转换为字符串)的应用程序可能会失败,因为类路径上存在Saxon意味着它实际上正在运行XPath 2.0或更高版本。

要解决此问题,从Saxon 9.6以后的版本不再声明自己是XPath服务提供者,现在您必须直接实例化Saxon,而不是通过JAXP工厂机制实例化。但是,如果您使用的版本早于9.6,则问题仍然存在。

您可以通过运行来了解所拥有的版本

java -cp saxon9.jar net.sf.saxon.Version