用户 Scala William 添加的解决方案是可行的方法,但他的解决方案有点过时。这是他为 zorba 3.0 更新的代码:
F.xq:
module namespace X = "urn:xml-files";
import module namespace ddl = "http://zorba.io/modules/store/static/collections/ddl";
import module namespace dml = "http://zorba.io/modules/store/static/collections/dml";
import module namespace fs = "http://expath.org/ns/file";
import module namespace x = "http://zorba.io/modules/xml";
declare namespace an = "http://zorba.io/annotations";
declare collection X:files as node()*;
declare variable $X:uri := xs:QName('X:files');
declare %an:nondeterministic function X:get-xml-list($dir-name as xs:string)
{
let $files := fs:list($dir-name, fn:false(),"*.xml")
for $filename in $files
return concat($dir-name,$filename)
};
declare %an:sequential function X:load-files($names as xs:string*)
{
ddl:create($X:uri);
dml:insert($X:uri, for $filename in $names return x:parse(fs:read-text($filename),()));
};
declare %an:sequential function X:load-directory($dir-name as xs:string)
{
X:load-files(X:get-xml-list($dir-name))
};
请注意在 X:get-xml-list() 的返回中调用 concat(...) 而不仅仅是 $filename。此外,在 X:load-files() 处对 insert-nodes(...) 的调用已更改为 insert(...)。
如果您需要递归列表,请考虑在 X:get-xml-list() 的 fs:list(...) 中将 fn:false() 更改为 fn:true()。