Xquery 如何将节点作为for循环中的第一个元素插入?

Xquery 如何将节点作为for循环中的第一个元素插入?,xquery,basex,Xquery,Basex,我得到以下错误: 元素构造函数:不允许更新表达式 尝试插入时,将节点测试作为第一个插入$c 我觉得我的代码就像我在网上看到的一样,尽管我显然出了什么问题 如何插入带有for循环的节点 declare namespace db="http://basex.org/modules/db"; declare namespace file="http://expath.org/ns/file"; declare variable $form13FFileNumber as xs:string exter

我得到以下错误:

元素构造函数:不允许更新表达式

尝试插入时,将节点测试作为第一个插入$c

我觉得我的代码就像我在网上看到的一样,尽管我显然出了什么问题

如何插入带有
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)
declare namespace db=”http://basex.org/modules/db";
声明命名空间文件=”http://expath.org/ns/file";
将变量$form13FFileNumber声明为xs:string external;
让$data:=db:open('13F')//data[包含(edgarSubmission/formData/coverPage/form13FFileNumber,$form13FFileNumber)]
让$fields:=
{
对于$c,在$data return中
将测试节点作为第一个插入到$c中
}
返回文件: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>

看起来您想要创建一个新的结果集:这里根本不需要XQuery更新!如果您想更改现有文档,但在构建新文档时根本不需要,那么XQuery Update非常有用

<form13FFile>
{
for $c in $data return 
<b4>test</b4>
}
</form13FFile>
[我已经回答了“离线”,但作为参考,我也将我的建议放在这里]

我认为您需要的是一个copy-modify返回表达式,这就是创建更新副本的方式

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>
let$字段:=
{
对于$c,在$data中
返回
复制$new节点:=$c
修改将测试节点作为第一个插入$new节点
返回$new节点
}
[我已经回答了“离线”,但为了便于参考,我也将我的建议放在这里]

我认为您需要的是一个copy-modify返回表达式,这就是创建更新副本的方式

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>
let$字段:=
{
对于$c,在$data中
返回
复制$new节点:=$c
修改将测试节点作为第一个插入$new节点
返回$new节点
}

Hi Jens,我已经调整了我的问题,添加了我希望xml看起来像什么的示例,使之更清晰。你的解决方案的结果是测试,这不是我想要的。抱歉,问题不清楚。嗨,Jens,我已经调整了我的问题,添加了我希望xml看起来像什么的示例,使之更清楚。你的解决方案的结果是测试,这不是我想要的。对不起,问题不清楚。