BaseX - 将节点{...}插入到//中以用于多个节点

时间:2013-09-26 01:08:31

标签: iteration xquery nodes basex

我目前面临BaseX原生XML数据库的问题。

我有一个示例数据集,我想检查某个节点中是否存在某个属性,如果存在,则设置值为“true”。如果它不存在,我想插入一个新属性。这是我的单个节点的代码:

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 个答案:

答案 0 :(得分: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)