2017-06-13 42 views
3

我正在編寫需要返回XML節點的修改版本而不更改父文檔中的原始節點的代碼。如何在Marklogic XQuery中複製/克隆節點

如何複製/克隆節點以便原始上下文不會連接到/受其影響?我不希望對此節點所做的更改來更改父文檔中的原始節點,而只是修改函數返回的副本。

我正在尋找將是非常相似,無論CTS:亮點在內部做:

返回節點的副本,取代了查詢 與指定表達式匹配的任何文本。您可以使用此功能輕鬆地高亮顯示查詢中找到的任何文本。與fn:替換和其他 XQuery字符串函數匹配文本文本,cts:突出顯示匹配 每一個與搜索匹配的項,包括詞幹匹配或 與不同的大寫匹配。 [marklogic docs > cts:highlight]

回答

6

創建克隆最簡單的方法/節點的副本是使用computed document node constructor

document{ $doc } 

如果您正克隆不是一個document-node()一個節點,不想document-node(),只是原來node()的克隆,那麼你可以XPath來選擇從新document-node()是克隆節點:

document{ $foo }/node() 
0

只是爲了補償一般來說,標準XQuery更新工具具有明確執行副本的複製修改表達式。沒有修改,就像顯式克隆。

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

我不確定MarkLogic是否支持這種語法。據我所知,它使用自己的函數庫進行更新。

+0

不幸的是,雖然https://github.com/ryanjdew/XQuery-XML-Memory-Operations得到相當接近.. – grtjn

0

內存中的XML節點不能直接修改。相反,您在構建新節點時進行所需的更改。如果您瞭解XSLT,那可以是一個很好的方法。如果沒有,您可以使用XQuery technique called recursive descent