我如何 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。
我正在编写代码,需要 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。