Saxon XQuery和集合:在FLWOR查询中是否可以检索返回项的文件名?

时间:2016-03-22 10:39:40

标签: xquery saxon

我想执行这种flwor查询(我使用的是Saxon):

for $baseItem in collection('file:/xmlDir?select=*.xml;recurse=yes')/item
  let $itemToRetrieve := xs:string($baseItem/item)
  let $itemFilter := xs:string($baseItem/filter)
  let $fileName := tokenize("*xmlPath($baseItem)*"),'/')[last()]
  where $itemFilter = 'test'
  return ($itemToRetrieve, $fileName)

通过这种方式,我可以快速找到处理大型集合时处理器找到的返回项目,而无需使用外部程序,例如查找命令。

我曾尝试使用document-uri()和base-uri()函数,但没有成功。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

document-uri()功能可以为您提供所需的功能。我刚试过

collection($someURI)!document-uri(.)

并且它适用于我,前提是集合中的项目都是文档节点(但如果集合包含作为非文档节点之外的项目检索的非XML资源,则它会失败并出现类型错误)

另一种方法是使用uri-collection(),它为您提供资源的URI而不是资源本身;然后,您可以使用doc()函数(或json-doc()或unparsed-text()取决于所需的特定资源,具体取决于资源的类型)。