Отбор признаков элемента, используя булевы операторы (и, или, не) в XQuery

Я хочу отфильтровать результаты следующего XQuery:

for $units in $data//*[@id = $ids and (@xref = $a or @xref = $b)]/@id 

Как я выбираю элементы с соответствующим @id стоимость и и @xref признак, который соответствует любому $a или $b, но не и $a и $b.

И $a и $b - наборы узлов с размеченными ценностями, который оба акта как идентификаторы. Требуемый идентификатор может быть сохранен или в $a или в $b.

Мое намерение состоит в том, что, если $a соответствует <сильному> @xref признак, вопрос не проверяет на $b.

1
nl ja de
Но с тем намерением вы могли просто использовать или, couldn' t вы? Если бы $a соответствует признаку @xref и не проверяет $b, это приняло бы? Если бы $a не соответствует, он проверил бы $b и принял бы тогда. Который является или.
добавлено автор BeniBela, источник
That' s право. У меня была проблема отбора слишком многих признаков, но причиной был на самом деле дополнительный разрез в другом месте в вопросе.
добавлено автор ritzdiamond, источник

1 ответы

Лучше всего должен был бы использовать xor. Слишком плохо нет никакого xor...

Но! = и ne делает то же самое:

 for $units in $data//*[@id = $ids and ((@xref = $a) ne (@xref = $b))]/@id 

И это должно быть быстрее, чтобы использовать eq вместо = для единственных ценностей:

 for $units in $data//*[@id = $ids and ((@xref eq $a) ne (@xref eq $b))]/@id 
0
добавлено
Бени, мы don' t знают, каков тип $a и $b . Любой из них может быть набором узлов. Поэтому предложение, чтобы использовать eq не правилен.
добавлено автор Dimitre Novatchev, источник
@DimitreNovatchev: Но that' s, почему я написал "для единственных ценностей". Если у него есть наборы узлов, он должен знать, что это не единственные ценности...
добавлено автор BeniBela, источник
Действительно, и $a и $b - наборы узлов, которые функционируют как дополнительные идентификаторы.
добавлено автор ritzdiamond, источник
Спасибо, я понял, что и пересмотрел вопрос соответственно.
добавлено автор ritzdiamond, источник