Ваше условие "где" означает, что вас интересуют только строки, где $z/FCTAAPLI = "${Properties#NUM_APLICACAO}"
, но ваше описание проблемы предполагает, что вы также хотите вывод в тех случаях, когда это не так.
Я понятия не имею, что стоит за string($z) = ""
. Ни одна из строк в ваших примерах данных не имеет строкового значения нулевой длины, поэтому я не знаю, для чего предназначалось это условие.
На данный момент я понимаю, что вы на самом деле не говорите, что хотите, чтобы ваш запрос делал. Вы говорите, что он работает в некоторых условиях и не работает в других условиях, но это трудно исправить, не зная, каким должен быть «правильный ответ».
Возможно, вы хотели что-то вроде:
<Results>
{
for $z in //ResultSet/Row
return if $z/FCTAAPLI = "${Properties#NUM_APLICACAO}"
then number($z/FVALOR)
else 0
}
</Results>
но это довольно дикое предположение.
== ПОЗЖЕ ==
С вашим пересмотренным заявлением о требованиях, похоже, вы просто хотите
(//ResultSet/Row
[FCTAAPLI = "${Properties#NUM_APLICACAO}"]/number($z/FVALOR), 0)[1]
идиома
(a/b/c, $default)[1]
выглядит странно при первом столкновении, но это очень полезно: он возвращает первый элемент, выбранный a/b/c
, если он есть, или $default
в противном случае.