首页 > 解决方案 > SAXON - XPath,使用节点和原始值解析变量

问题描述

我有一个评估案例,例如:

$asset eq 100 and $asset/name() eq 'p0:current_asset'

应该返回true(),变量$asset需要在同一评估中解析为原始值和节点值,我XPathVariableResolver在评估运行时使用接口来解析变量。

TinyElementImpl解析变量时返回

public Object resolveVariable(QName variableName)

没有解决问题,我使用的是 SAXON-HE 的 JAXP 实现。

有可能这样做吗?

标签: javaxmlxpathsaxonjaxp

解决方案


我们(Saxonica)还没有非常清楚地记录Object我们的实现接受哪种类型的 JAXPresolveVariable()方法,我正在修复它。返回任何NodeInfo(因此包括 的实例TinyElementImpl)应该可以正常工作。

如果您使用的是 Saxon-HE,则它不支持模式,因此元素的类型值将始终为untypedAtomic,因此与整数进行比较是行不通的。尽管有些读者可能会感到困惑,但最简单的解决方法是将条件更改为+$asset eq 100- 一元加运算符强制进行类型转换。

我也不会写$asset/name() eq 'p0:current_asset',因为它依赖于命名空间前缀。更好的是写$asset[self::p0:current-asset]


推荐阅读