如何对文件夹中的所有XML文档执行XQuery

如何对文件夹中的所有XML文档执行XQuery,xquery,basex,Xquery,Basex,我需要确保在许多XML文件中存在特定的节点。每次我想查询另一个文档时,都必须切换上下文 是否有任何方法可以在不切换上下文的情况下对目录中的所有文档执行XQuery?我可能会晚一点,但以下XQuery很可能会按照您的意愿执行,它会返回每个不包含特定元素的XML文件的路径: let $path := "." for $file in file:list( $path, true(), '*.xml') let $path := $path || "/" || $file where not

我需要确保在许多XML文件中存在特定的节点。每次我想查询另一个文档时,都必须切换上下文


是否有任何方法可以在不切换上下文的情况下对目录中的所有文档执行XQuery?

我可能会晚一点,但以下XQuery很可能会按照您的意愿执行,它会返回每个不包含特定元素的XML文件的路径:

let $path := "."
for $file in file:list( $path, true(), '*.xml')
  let $path := $path || "/" || $file
  where not(
    exists(fetch:xml($path)/foo/bar[text() = "Text"])
  )  
return $path 
如果您只对特定元素中存在或不包含特定元素的XML文件感兴趣,则以下查询可能有用:

declare variable $path := "/Users/michael/Code/foo";

every $doc in file:list($path, true(), '*.xml') (: returns a sequence of file-names :)
              => for-each(concat($path,"/", ?)) (: returns a sequence of full paths to each file :)
              => for-each(fetch:xml#1)          (: returns a sequence of documents :)
satisfies exists(
  $doc/*/*[text() = "Text"]
)

希望这有帮助;-)

使用文件api枚举和打开文件的解决方案是否适用于您?@JonSG是的,它将对其他面临相同情况的人有用。您是否开发/发现了解决方案?