Как выполнить XQuery для всех документов XML в папке - PullRequest
0 голосов
/ 18 января 2019

Мне нужно убедиться, что определенный узел существует во многих файлах XML. Мне приходится переключать контекст каждый раз, когда я хочу запросить другой документ.

enter image description here

Есть ли способ выполнить XQuery для всех документов в каталоге, не переключая контекст?

1 Ответ

0 голосов
/ 19 марта 2019

Возможно, я немного опоздал, но, скорее всего, следующий 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"]
)

Надеюсь, это поможет; -)

...