java - 无法比较 xs :string to xs:integer

标签 java xpath talend saxon

当前在 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 文件包含一个 list ,表明它是 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

关于java - 无法比较 xs :string to xs:integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51435645/

相关文章:

java - 如何在java中将字符串拆分为列

etl - Talend 中 twarn 和 tassert 之间的区别

java - Spring 集成: poll files based on creation date/time

java - XMPP注册新用户

c# - "Two-way binding requires Path or XPath"编辑 wpf 数据网格时

html - 如何使用 Nokogiri 删除节点

Talend:更新子作业中的全局变量

java - 以编程方式为 Android 按钮添加边距

java - 是否可以在指令中检索 Freemarker 参数值?

xpath - 在 selenium IDE 中组合 XPath 选择器