2015-05-08 4 views
1

У меня есть следующее условие в моем прокси-сервере OSB.OSB: Не удалось выполнить сравнение Xquery с ошибкой

$body/*[1]/xyzflag eq 'true' and (:some other true conditions:) 

Узел xyzflag даже не присутствует под узлом, на который указывает переменная $ тела.

Условие работает должным образом (дает ложь) в большинстве случаев. но когда-то это дает истину.

Кто-нибудь сталкивался с такой ситуацией? Кажется, это ошибка. Может помочь?

+1

Ваше выражение XQuery кажется недействительным (предикат без проверки имени). Убедитесь, что код _copy_, и не перепечатывайте его; также отправьте примеры _working_ (прочитайте [как опубликовать SSCCE] (http://www.sscce.org) о том, как должен выглядеть минимальный пример). Также включите пример ввода, для которого условие не выполняется. –

+0

извините за опечатку. Я съел звездочку, пытаясь сделать ее смелой. Правильное выражение is- $ body/* [1]/customerId – Arjit

+0

Не могли бы вы дать примерное значение для $ body, где $ body/* [1]/xyzflag eq 'true' неожиданно оценивается как истина? – Josh

ответ

-1

Выражение XQuery, которое вы пытаетесь, неверно.

например. Если ваш XML будет выглядит следующим образом:

<school> 
<teacher> 
    <isClassteacher>Y</isClassteacher> 
</teacher> 

<teacher> 
    <isClassteacher>N</isClassteacher> 
</teacher> 
</school> 

Тогда ваше выражение будет, как показано ниже: данных ($ тела/учитель [1]/isClassteacher) = 'Y'

Примечание: Пожалуйста, внесите изменения согласно вашему требованию.

Надеюсь, это будет полезно.

рассматривает

Asutosh

+0

Я не вижу ничего плохого в своем выражении XPath. $ body/* выбирает все дочерние элементы $ body, независимо от имени. См. Https://www.w3.org/TR/xquery/#abbrev – Josh

-1

Попробуйте сделать это следующим образом:

сноска: данные ($ тела/[1]/xyzflag)

+0

eq будет распылять аргументы неявно: https://www.w3.org/TR/xquery/#id-value-comparisons Добавление fn: data не является неправильным, но не является необходимым. – Josh

-1

Если проверка на существование этого узла <xyzflag>, я предлагаю вам использовать функцию fn:exists.

Это выражение

$body/*[1]/xyzflag = 'true' 

возвращает истину, если узел <xyzflag> присутствует. Не стоит беспокоиться о том, присутствует ли содержимое узла или нет.

+1

$ body/* [1]/xyzflag = 'true' не будет оцениваться истинно просто потому, что присутствует . Он будет оценивать значение true, когда значение одного из элементов xyzflag равно строке «true». См. Https://www.w3.org/TR/xquery/#id-general-comparisons – Josh