我正在编写需要返回XML节点的修改版本的代码,而不更改父文档中的原始节点。
如何复制/克隆节点,以便原始上下文不会连接到/受其影响?我不希望对此节点进行更改以更改父文档中的原始节点,只更改我的函数返回的副本。
我正在寻找的东西与cts非常相似:亮点在于内部:
返回节点的副本,替换与查询匹配的任何文本 使用指定的表达式。您可以轻松使用此功能 突出显示查询中找到的任何文本。与fn:replace和其他不同 与文字文本匹配的XQuery字符串函数,cts:highlight匹配 与搜索匹配的每个术语,包括词干匹配或 匹配不同的大写。 [marklogic docs > cts:highlight]
答案 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。