4

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

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

我正在寻找的内容与 cts:highlight 在内部所做的非常相似:

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

4

3 回答 3

7

创建节点的克隆/副本的最简单方法是使用计算的文档节点构造函数

document{ $doc }

如果您正在克隆一个不是 a 的节点document-node(),并且不想要 a document-node(),而只是原始的克隆node(),那么您可以 XPath 从新的节点中选择该克隆节点document-node()

document{ $foo }/node()
于 2017-06-14T02:24:17.390 回答
0

仅出于完整性考虑:通常,标准 XQuery 更新工具具有显式执行复制的复制修改表达式。无需修改,这就像显式克隆。

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

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

于 2017-06-14T12:44:06.503 回答
0

内存中的 XML 节点不可直接修改。相反,您可以在构建新节点时进行所需的更改。如果您了解 XSLT,那将是一个很好的方法。如果没有,您可以使用一种称为递归下降的 XQuery 技术

于 2017-06-15T12:32:30.027 回答