我收到以下错误:
XUST0001元素构造函数:不允许更新表达式。
尝试将插入节点时首先插入到$ c
中我觉得我的代码跟随examples我在网上看到了,虽然显然我有些不对劲。
如何插入带有for
循环的节点?
declare namespace db="http://basex.org/modules/db";
declare namespace file="http://expath.org/ns/file";
declare variable $form13FFileNumber as xs:string external;
let $data := db:open('13F')//data[contains(edgarSubmission/formData/coverPage/form13FFileNumber,$form13FFileNumber)]
let $fields :=
<form13FFile>
{
for $c in $data return
insert nodes <b4>test</b4> as first into $c
}
</form13FFile>
return file:write(concat('../OUT/' , $form13FFileNumber , '.xml'), $fields)
为了更清楚,我的xml看起来像
<data>
<first_Child>text</first_child>
</data>
<data>
<first_Child>text</first_child>
</data>
我希望它适应
<form13FFile>
<data>
<b4>test</b4>
<first_Child>text</first_child>
</data>
<data>
<b4>test</b4>
<first_Child>text</first_child>
</data>
</form13FFile>
答案 0 :(得分:2)
您似乎想要创建一个新的结果集:您根本不需要XQuery更新!如果您想要更改现有文档,XQuery Update非常有用,但在构建新文档时根本不需要。
<form13FFile>
{
for $c in $data return
<b4>test</b4>
}
</form13FFile>
或者如果你想坚持as first
语义(我希望将来静态测试元素会改变),在循环之前反转$data
:
<form13FFile>
{
for $c in reverse($data) return
<b4>test</b4>
}
</form13FFile>
答案 1 :(得分:1)
[我已经回答“离线”,但作为参考,我也在这里提出我的建议]
我认为你需要的是一个复制 - 修改 - 返回表达式,这就是你创建更新副本的方式。
let $fields :=
<form13FFile>
{
for $c in $data
return
copy $new-node := $c
modify insert nodes <b4>test</b4> as first into $new-node
return $new-node
}
</form13FFile>