我想删除重复的2353218次相同的元素,在xml中仅保留一个。试图产生该过程,但出现以下错误。没有产卵会花费太多时间。请帮忙。
xquery version "1.0-ml";
let $input := doc("http://www.somedomain.com/name/12345.xml")/xpath/toMultipleElement[2 to last()]
let $batch-size := 50000
let $input-size := fn:count($input)
let $num-batches := xs:int(math:ceil($input-size div $batch-size ))
let $result :=
<root>{
for $batch-start in (1 to $num-batches)
let $processing-seq := $input[($batch-size * ($batch-start - 1) + 1) to ($batch-size * ($batch-start ))]
return
xdmp:spawn-function(function() {
xdmp:node-delete($processing-seq),
<success batch-start='{$batch-start}'> processing sequence deleted</success>
},
<options xmlns="xdmp:eval">
<result>true</result>
<transaction-mode>update-auto-commit</transaction-mode>
</options>)
}</root>
return
xdmp:save("D:/batch-wise-delete.xml", $result)
错误:[1.0-ml] XDMP-DELEXTNODES:让$ processing-seq:= $ input [$ batch-size *($ batch-start-1)+1到$ batch-size * $ batch-start] -无法删除外部节点
答案 0 :(得分:4)
代替删除所有孩子,只需写一个有一个孩子的新父母即可。
let $parent := doc("http://www.somedomain.com/name/12345.xml")/xpath/parent
let $chosen-child := $parent/toMultipleElement[1]
return xdmp:node-replace($parent, <parent>{ $chosen-child }</parent>
答案 1 :(得分:3)
我建议您不要尝试删除所有不需要的节点,而应该通过一次遍历来重建文档。
基本策略在这里https://developer.marklogic.com/blog/xquery-recursive-descent
基本上-通过递归遍历现有文档中的所有节点并返回它们不变的 来排除不需要的节点,从而创建一个新文档。 然后将新文档保存在旧文档上。 这可以非常有效地在一个事务中完成。