如何在Marklogic XQuery中复制/克隆节点

时间:2017-06-13 20:27:17

标签: xquery marklogic marklogic-9

我正在编写需要返回XML节点的修改版本的代码,而不更改父文档中的原始节点。

如何复制/克隆节点,以便原始上下文不会连接到/受其影响?我不希望对此节点进行更改以更改父文档中的原始节点,只更改我的函数返回的副本。

我正在寻找的东西与cts非常相似:亮点在于内部:

  

返回节点的副本,替换与查询匹配的任何文本   使用指定的表达式。您可以轻松使用此功能   突出显示查询中找到的任何文本。与fn:replace和其他不同   与文字文本匹配的XQuery字符串函数,cts:highlight匹配   与搜索匹配的每个术语,包括词干匹配或   匹配不同的大写。 [marklogic docs > cts:highlight]

3 个答案:

答案 0 :(得分:6)

创建节点克隆/副本的最简单方法是使用computed document node constructor

document{ $doc }

如果您要克隆的节点不是document-node(),并且不想要document-node(),只需克隆原始node(),那么您可以选择XPath来自新document-node()的克隆节点:

document{ $foo }/node()

答案 1 :(得分:0)

仅为了完整性:通常,标准XQuery更新工具具有显式执行副本的复制修改表达式。没有修改,这就像显式克隆。

copy $node := $foo
modify ()
return $node

我不确定MarkLogic是否支持这种语法。据我所知,它使用自己的函数库进行更新。

答案 2 :(得分:0)

内存中的XML节点无法直接修改。而是在构建新节点时进行所需的更改。如果你了解XSLT,这可能是一个很好的方法。如果没有,您可以使用XQuery technique called recursive descent