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)