如何从XPath查询返回的序列中提取指定匹配的属性值
如何在XQuery中捕获指定路径值
你当前的XQuery查询返回了三个文件系统路径,要单独提取/etc/readme/file-permission到变量中,可以通过以下几种方式实现:
先纠正原查询的笔误:原代码中的/string(fn:ends)是错误写法,正确的字符串转换应该使用fn:string(),否则会触发函数不存在的报错。
方法一:精准匹配目标路径
直接在路径筛选阶段添加等值判断,确保只获取指定路径:
xquery version "1.0-ml"; let $bkp_location := xdmp:filesystem-directory("/etc/")//dir:entry/dir:pathname[fn:string() = "/etc/readme/file-permission"]/fn:string() return $bkp_location
方法二:按路径特征过滤
如果目标路径有固定标识(比如包含/readme/),可以用fn:contains做模糊匹配:
xquery version "1.0-ml"; let $bkp_location := xdmp:filesystem-directory("/etc/")//dir:entry/dir:pathname[fn:contains(fn:string(), "/readme/")]/fn:string() return $bkp_location
方法三:通过位置索引提取
如果返回结果的顺序固定(目标路径是第二个),可以用位置索引直接取值:
xquery version "1.0-ml"; let $bkp_location := (xdmp:filesystem-directory("/etc/")//dir:entry/dir:pathname/fn:string())[2] return $bkp_location
注意事项
- 精准匹配稳定性最高,适合路径固定的场景;
- 特征过滤适合路径有规律但可能存在细微变化的场景;
- 位置索引依赖返回结果的排序顺序,文件系统的排序规则可能影响结果,仅在顺序确定时使用。
内容的提问来源于stack exchange,提问作者Aviator
相关产品推荐
相关产品推荐

