Xquery 使用mem:insert-child()在内存中更新后节点的顺序不一致

Xquery 使用mem:insert-child()在内存中更新后节点的顺序不一致,xquery,marklogic,Xquery,Marklogic,我使用Ryan Dew的xquery模块()和MarkLogic v8.0-5对文档执行内存更新 下面的代码示例复制了我在使用insert-child()操作时遇到的问题。使用insert-child()插入的元素应该反映插入顺序,但我发现它们不反映插入顺序。换句话说,元素在输出中的顺序应该是1、2、3、4、5。相反,顺序似乎是随机的 let $x := <root><original-container><one/><two/><three

我使用Ryan Dew的xquery模块()和MarkLogic v8.0-5对文档执行内存更新

下面的代码示例复制了我在使用insert-child()操作时遇到的问题。使用insert-child()插入的元素应该反映插入顺序,但我发现它们不反映插入顺序。换句话说,元素在输出中的顺序应该是1、2、3、4、5。相反,顺序似乎是随机的

let $x := <root><original-container><one/><two/><three/><four/><five/></original-container><new-container/></root>
let $tx := mem:copy($x)
let $_ :=
   for $item in $x/original-container/*
   return ( 
      xdmp:set( $tx, mem:delete($tx, $item) ) , 
      xdmp:set( $tx, mem:insert-child($tx, $x/new-container, $item) )
   )

return mem:execute( $tx )
让$x:=
let$tx:=mem:copy($x)
让我们:=
对于$x/原始容器中的$item/*
报税表(
xdmp:set($tx,mem:delete($tx,$item)),
xdmp:set($tx,mem:insert子项($tx,$x/新容器,$item))
)
返回mem:execute($tx)

我可能误用了代码库——特别是,我正在创建一个事务映射,然后在每次
insert-child()
操作后使用
xdmp:set()
重置它。也许这不正确?

我道歉,因为这是我代码中的一个错误。一个表达式以“文档顺序”返回节点,并跨越可能随机出现的文档返回节点。我已经提交了一个修复,更多详细信息可以在

中找到,包括删除和插入子接受序列作为最后一个参数。您是否考虑过同时删除和插入所有项目?这可能也会执行得更好。这实际上是我正在使用的解决方法,但在某些情况下,很难将所有节点收集在一起进行一次插入。