我如何 Copy/Clone Marklogic XQuery 中的节点

How Do I Copy/Clone a Node in Marklogic XQuery

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

我怎样才能copy/clone这个节点,这样原来的上下文就不会被to/affected连接起来了?我不希望对此节点所做的更改更改父文档中的原始节点,只是更改为我的函数正在 returning.

的副本

我正在寻找的东西与 cts:highlight 在内部所做的任何事情都非常相似:

Returns a copy of the node, replacing any text matching the query with the specified expression. You can use this function to easily highlight any text found in a query. Unlike fn:replace and other XQuery string functions that match literal text, cts:highlight matches every term that matches the search, including stemmed matches or matches with different capitalization. [marklogic docs > cts:highlight]

创建节点的 clone/copy 最简单的方法是使用 computed document node constructor:

document{ $doc }

如果您正在克隆一个不是 document-node() 的节点,并且不想要 document-node(),只是原始 node() 的克隆,那么您可以使用 XPath 来select 从新 document-node():

克隆的节点
document{ $foo }/node()

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

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

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

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