使用 mem:insert-child() 进行内存更新后节点的排序不一致

Ordering of nodes after in memory update with mem:insert-child() is inconsistent

我正在使用 Ryan Dew 的 xquery 模块 (https://github.com/ryanjdew/XQuery-XML-Memory-Operations) 和 MarkLogic v8.0-5 来对文档执行内存更新。

以下代码示例复制了我在使用 insert-child() 操作时遇到的问题。用 insert-child() 插入的元素应该反映插入顺序,但我发现它们没有。换句话说,元素在输出中的顺序应该是一、二、三、四、五。相反,顺序似乎是随机的。

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 )

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

抱歉,这是我代码中的错误。一个表达式正在返回 "document order" 中的节点以及可能随机出现的文档。我已经提交了一个修复程序,可以在 the ticket on GitHub.

找到更多详细信息