BaseX - вставить узел {...} в //.. для нескольких узлов

В настоящее время я сталкиваюсь с проблемой с базой данных XML BaseX.

У меня есть образец набора данных, в котором я хочу проверить, существует ли определенный атрибут в определенном узле, и если это так, установить значение "истина". Если он не существует, я хочу вставить новый атрибут. Это мой код для одного узла:

if(fn:exists(//Dataset[@attribute="2"]/@b)) then
  replace value of node //Dataset[@attribute="2"]/@b with "true"
else
  insert node (attribute { 'b' } { "CREATED!" }) into //Dataset[@attribute="2"]

Проблема, с которой я сталкиваюсь в данный момент, заключается в том, что я не могу найти способ перебора всех узлов типа "Набор данных", например, и проверить каждый узел. Он всегда говорит: "Один элемент или документ ожидаются в качестве цели вставки".

1 ответ

Хорошо, гуглил долго, но еще 15 минут спасло бы меня от публикации этого вопроса:

for $dataset in //mondial/Dataset
 let $DOCH := $dataset/@DOCH
 return
 if(fn:exists($DOCH)) then (
replace value of node $DOCH with "true")
else (
  insert node (attribute DOCH {"true"}) into $dataset)
Другие вопросы по тегам