我必須複製MarkLogic服務器中的整個項目文件夾,而不是手動完成它,我決定用遞歸函數來完成它,但它正在成爲我所遇到過的最糟糕的想法。我遇到了交易和語法方面的問題,但是新的我沒有找到解決問題的真正方法。這是我的代碼,謝謝你的幫助!用XQuery遞歸複製一個文件夾
import module namespace dls = "http://marklogic.com/xdmp/dls" at "/MarkLogic/dls.xqy";
declare option xdmp:set-transaction-mode "update";
declare function local:recursive-copy($filesystem as xs:string, $uri as xs:string)
{
for $e in xdmp:filesystem-directory($filesystem)/dir:entry
return
if($e/dir:type/text() = "file")
then dls:document-insert-and-manage($e/dir:filename, fn:false(), $e/dir:pathname)
else
(
xdmp:directory-create(concat(concat($uri, data($e/dir:filename)), "/")),
local:recursive-copy($e/dir:pathname, $uri)
)
};
let $filesystemfolder := 'C:\Users\WB523152\Downloads\expath-ml-console-0.4.0\src'
let $uri := "/expath_console/"
return local:recursive-copy($filesystemfolder, $uri)
多少文件都在複製,例如:這可以通過一個簡單的循環在xdmp實現呢?如果您的數據集非常大,那麼好的解決方案就會縮小。另外,你確定你需要dls嗎?你可能會好嗎?ol-xdmp:document-insert? –
@SamMefford嗯,我試圖複製一個充當UI控制檯的整個嵌套項目來查看服務器本身內部的文件和文件夾的層次結構,因此不使用xdmp:document-insert將無濟於事。不,我不確定dls,我只是想找到一個解決方案。我也嘗試使用mlcp命令,但無法訪問服務器。 – MissArmstrong