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

Cannot compare xs:string to xs:integer

目前 运行 Talend 上的一个代码,它抛出了这个错误

net.sf.saxon.trans.XPathException: Cannot compare xs:string to xs:integer at net.sf.saxon.expr.GeneralComparison.typeCheck(GeneralComparison.java:255)

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

您将哪个版本的 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