Marklogic 从文件系统中获取文件,这些文件可以在任何级别的深层子文件夹中找到
我正在使用ML5,希望将文档从本地文件系统接收/加载到MarkLogic DB。我在xdm的帮助下创建了递归函数:filesystem-directory()函数,用于检查文件夹深度。但是,我得到了XDMP-STACKOVERFLOW错误。“我的文件系统”文件夹具有多个文件夹和多个深度的多个子文件夹。比如说Marklogic 从文件系统中获取文件,这些文件可以在任何级别的深层子文件夹中找到,marklogic,Marklogic,我正在使用ML5,希望将文档从本地文件系统接收/加载到MarkLogic DB。我在xdm的帮助下创建了递归函数:filesystem-directory()函数,用于检查文件夹深度。但是,我得到了XDMP-STACKOVERFLOW错误。“我的文件系统”文件夹具有多个文件夹和多个深度的多个子文件夹。比如说 ├───vol_18 │ ├───iss_1 │ ├───iss_2 │ ├───iss_3 │ ├───iss_4 │ ├───iss_5 │ └───iss_6
├───vol_18
│ ├───iss_1
│ ├───iss_2
│ ├───iss_3
│ ├───iss_4
│ ├───iss_5
│ └───iss_6
├───vol_19
│ ├───iss_1
│ ├───iss_2
│ ├───iss_3
│ ├───iss_4
│ ├───iss_5
│ └───iss_6
├───vol_2
│ ├───iss_1
│ ├───iss_2
│ ├───iss_3
│ ├───iss_4
│ ├───iss_5
│ └───iss_6
有没有其他更好的方法从本地文件系统递归获取文件
我的代码是:
declare function IngestArchive($WhichFolder)
{
let $FileToIngest := ""
let $Collection := tokenize($WhichFolder, '\\')[last()]
for $EachFolder in xdmp:filesystem-directory($WhichFolder)/dir:entry
return
if( $EachFolder[dir:type='directory'] )
then
let $Result := HasFolder($WhichFolder)
return xdmp:set($FileToIngest, <File>{$Result/dir:pathname/string()}</File>)
else
xdmp:set($FileToIngest, <File>{$EachFolder/dir:pathname/string()}</File>)
};
declare function HasFolder($WhichFolder)
{
for $EachFolder in xdmp:filesystem-directory($WhichFolder)/dir:entry[1]
return
if( $EachFolder[dir:type='directory'] )
then
HasFolder($WhichFolder)
else
<File>{$EachFolder/dir:pathname/string()}</File>
};
声明函数IngestArchive($WhichFolder)
{
让$FileToInGet:=“”
let$Collection:=标记化($WhichFolder,\\')[last()]
对于xdmp:filesystem目录中的$EachFolder($WhichFolder)/dir:entry
返回
if($EachFolder[dir:type='directory']))
然后
let$Result:=HasFolder($WhichFolder)
返回xdmp:set($FileToIngest,{$Result/dir:pathname/string()})
其他的
xdmp:set($FileToIngest,{$EachFolder/dir:pathname/string()})
};
声明函数HasFolder($WhichFolder)
{
对于xdmp:filesystem目录中的$EachFolder($WhichFolder)/dir:entry[1]
返回
if($EachFolder[dir:type='directory']))
然后
HasFolder($WhichFolder)
其他的
{$EachFolder/dir:pathname/string()}
};
请给出你的建议。看起来像一个无休止的循环。您的
HasFolder
函数调用自身,但使用原始参数。我想你想要这个:
HasFolder($WhichFolder)
替换为:
HasFolder($EachFolder)
嗯