Marklogic 从文件系统中获取文件,这些文件可以在任何级别的深层子文件夹中找到

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

我正在使用ML5,希望将文档从本地文件系统接收/加载到MarkLogic DB。我在xdm的帮助下创建了递归函数:filesystem-directory()函数,用于检查文件夹深度。但是,我得到了XDMP-STACKOVERFLOW错误。“我的文件系统”文件夹具有多个文件夹和多个深度的多个子文件夹。比如说

├───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)