SAXON - XPath, разрешающая переменная с узлом и примитивным значением - PullRequest
0 голосов
/ 06 августа 2020

У меня есть пример оценки, например:

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

, который должен возвращать true(), переменная $asset должна быть разрешена как примитив и значение узла в той же оценке, я использую XPathVariableResolver интерфейс для разрешения переменной при выполнении оценки.

Возвращает TinyElementImpl при разрешении переменной с помощью

public Object resolveVariable(QName variableName)

Не решает проблему, я использую JAXP-реализацию SAXON-HE .

А это возможно?

1 Ответ

0 голосов
/ 06 августа 2020

Мы (Saxonica) не очень четко задокументировали, какие типы Object наша реализация принимает в качестве результата метода JAXP resolveVariable(), и я в процессе исправления. Возврат любого NodeInfo (включая, следовательно, экземпляр TinyElementImpl) должен работать нормально.

Если вы используете Saxon-HE, то он не зависит от схемы, поэтому типизированное значение элемента всегда будет untypedAtomic, поэтому сравнение с целым числом работать не будет. Самое простое исправление, хотя некоторых читателей это может сбить с толку, - это изменить условие на +$asset eq 100 - унарный оператор плюс вызывает преобразование типа.

Я бы тоже не стал писать $asset/name() eq 'p0:current_asset', потому что это зависит от на префиксе пространства имен. Лучше написать $asset[self::p0:current-asset].

...