对一系列元素进行xdmp:node-replace()并将其替换为一个元素

问题描述 投票:0回答:1

所以我有一个有趣的问题,假设我在MarkLogic数据库中有此文档(example.xml):

<Enrolls>
  <Enroll>
    <Status> Active </Status>
    <boom> boom2 </boom>
  </Enroll>
    <Enroll>
    <Status> Active </Status>
    <boom> boom </boom>
  </Enroll>
  <Enroll>
    <Status> Inactive </Status>
    <boom> boom </boom>
  </Enroll>
</Enrolls>

我想用一个节点替换所有“有效”的Enroll元素,因此,基本上我的最终结果应该是:

<Enrolls>
  <boom> boom for the actives </boom>
  <Enroll>
    <Status> Inactive </Status>
    <boom> boom </boom>
  </Enroll>
</Enrolls>

要完成此操作,这是我编写的代码:

xdmp:node-replace((doc("example.xml")/Enrolls/Enroll[Status eq " Active "]), <boom> boom for the actives </boom>)

但这是我得到的结果:

<Enrolls>
  <boom> boom for the actives </boom>
  <boom> boom for the actives </boom>
  <Enroll>
    <Status> Inactive </Status>
    <boom> boom </boom>
  </Enroll>
</Enrolls>

该代码用我指定替换的相同节点替换了每个活动的注册。我希望它用一个节点同时替换两个节点。我该怎么做并得到想要的结果?

xquery marklogic-9
1个回答
0
投票
考虑对活动的节点执行xdmp:node-delete,对父节点执行单独的xdmp:node-insert-child。或者在第一个节点上进行节点替换,在其他节点上进行节点删除。您应该能够在一个请求中完成所有操作,因此这将只是一次提交。
© www.soinside.com 2019 - 2024. All rights reserved.