如何在 for 循环中插入一个节点作为第一个元素?
How do I insert a node as first element within a for loop?
我收到以下错误:
XUST0001 元素构造函数:不允许更新表达式。
尝试插入时 首先将节点测试插入 $c
我觉得我的代码遵循 examples 我在网上看到的代码,但显然我有问题。
如何插入带有 for
循环的节点?[=16=]
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>
您似乎想要创建一个新的结果集:您在这里根本不需要 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>
[我已经回答了 "offline",但为了参考,我也把我的建议放在这里]
我认为您需要的是复制-修改-return 表达式,这就是您创建更新副本的方式。
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>
我收到以下错误:
XUST0001 元素构造函数:不允许更新表达式。
尝试插入时 首先将节点测试插入 $c
我觉得我的代码遵循 examples 我在网上看到的代码,但显然我有问题。
如何插入带有 for
循环的节点?[=16=]
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>
您似乎想要创建一个新的结果集:您在这里根本不需要 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>
[我已经回答了 "offline",但为了参考,我也把我的建议放在这里]
我认为您需要的是复制-修改-return 表达式,这就是您创建更新副本的方式。
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>