【问题标题】:SAXON - XPath, Resolving Variable with Node and Primitive valueSAXON - XPath,使用节点和原始值解析变量
【发布时间】:2020-08-06 13:18:39
【问题描述】:

我有一个评估案例:

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

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

解析变量时返回TinyElementImpl

public Object resolveVariable(QName variableName)

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

有可能吗?

【问题讨论】:

    标签: java xml xpath saxon jaxp


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的建议。
    • 感谢您的建议。 “换个说法”。我想要,但我做不到。该表达式来自外部方。实际上表达式并不是字面上的“$asset/name() eq 'p0:current_asset'”,实际上表达式是长 xpath 表达式,它具有变量 $assset ,它被视为表达式的一部分中的原始值和节点值 ($资产/名称())在另一个。
    • 如果表述有误,又改不了,那我就不知道怎么帮你了。
    猜你喜欢
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2022-01-20
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多