在 XQuery 中迭代插入属性

Iterative insertion of attributes in XQuery

我有一个巨大的 XML 文件,其中一部分是

<tracklist>
  <track>
    <position>A1</position>
    <title>Un Momento Solo (North 5th. St. Dub)</title>
    <duration>6:04</duration>
  </track>
  <track>
    <position>A2</position>
    <title>Your Love Is Incredible</title>
    <duration>6:44</duration>
  </track>
  <track>
    <position>B1</position>
    <title>Roots</title>
    <duration>7:43</duration>
  </track>
  <track>
    <position>B2</position>
    <title>Un Momento Solo (Straight Up Mix)</title>
    <duration>7:06</duration>
  </track>
</tracklist>

我想向 tracklist 添加一个名为 tot 的属性,其中 tracklist 下的子节点总数称为 track

for $i in db:open("releases1","releases.xml")/releases/release
return update insert attribute tot {count($i/tracklist/track)} into 
$i/tracklist/track

但是,我遇到了一个错误

[XPST0003] Unexpected end of query: 'insert attribut...'.

这是一个小语法问题。更新语句的语法是

insert node [node] into [target-node]

关键字 insert node 总是一起出现,如果我没记错的话,这里使用两个词有一些语法原因(否则,在解析过程中可能会出现歧义)。

对于您的示例,删除 update 关键字(不存在)并添加缺少的 node:

for $i in db:open("releases1","releases.xml")/releases/release
return insert node attribute tot {count($i/tracklist/track)} into 
$i/tracklist