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

时间:2017-04-07 17:22:55

标签: xquery marklogic

我正在使用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 )

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

1 个答案:

答案 0 :(得分:4)

我道歉,因为这是我的代码中的一个错误。表达式返回&#34;文档顺序&#34;以及可以随机出现的文档。我已经提交了修复程序,可以在the ticket on GitHub.

找到更多详细信息