我想执行这种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()函数,但没有成功。
有没有办法实现这个目标?
答案 0 :(得分:1)
document-uri()
功能可以为您提供所需的功能。我刚试过
collection($someURI)!document-uri(.)
并且它适用于我,前提是集合中的项目都是文档节点(但如果集合包含作为非文档节点之外的项目检索的非XML资源,则它会失败并出现类型错误)
另一种方法是使用uri-collection(),它为您提供资源的URI而不是资源本身;然后,您可以使用doc()函数(或json-doc()或unparsed-text()取决于所需的特定资源,具体取决于资源的类型)。