从 xpath 序列返回匹配的属性值

Returning matching attribute value from xpath sequence

提问人:Aviator 提问时间:10/16/2023 最后编辑:Mads HansenAviator 更新时间:10/17/2023 访问量:43

问:

我正在尝试从以下查询返回的值列表中获取属性值:-

 xquery version "1.0-ml";
 let $bkp_location := xdmp:filesystem-directory("/etc/")//dir:entry/dir:pathname/string(fn:ends)
 return $bkp_location

上面的查询返回三个值

/etc/users
/etc/readme/file-permission
/etc/recovery-failures

我只想将 /etc/readme/file-permission 捕获到变量中。我该怎么做?

xpath xquery 标记逻辑

评论

0赞 Mads Hansen 10/16/2023
首先,你使用“属性”这个词,而对于XML,这意味着一些特定的东西。由于您返回的是字符串序列,因此我假设您只是意味着您正在查找序列中的一个特定项目,并且它与 XML 属性无关。你提前知道你想要吗?你只是想测试它是否存在吗?/etc/readme/file-permission
0赞 Mads Hansen 10/16/2023
其次,在你的代码中,你有 .这似乎不对。您是尝试进行过滤,还是为要返回的字符串值选择了其他内容?string(fn:ends)fn:ends-with()
0赞 Aviator 10/17/2023
嗨,我正在尝试在变量中捕获“/etc/readme/file-permission”,我无法使用 fn:ends-with() 做到这一点

答:

0赞 Mads Hansen 10/17/2023 #1

如果要查找以 () “permission” 结尾的文件,可以应用谓词来过滤该路径序列:

xdmp:filesystem-directory("/etc/")//dir:entry/dir:pathname/string()[ends-with(., "permission"]

如果您只是作为 XPath 的最后一步应用,那么它将返回布尔值,而不是使用它来过滤序列。ends-with()

您还可以在 FLWOR 的子句中使用 for 循环并测试 if:ends-with()where

for $path in xdmp:filesystem-directory("/etc/")//dir:entry/dir:pathname/string()
where ends-with($path, "permission"]
return $path