gpt4 book ai didi

xml - 使用 XQuery/XPath 获取祖先节点的逆序

转载 作者:数据小太阳 更新时间:2023-10-29 02:50:51 25 4
gpt4 key购买 nike

我正在寻找一个很好的解决方案(简短的表达式,最佳性能)来使用 BaseX 上的 XQuery 3.1 获取所有祖先节点的反向顺序。

现在我正在使用这段代码,为给定的 XML 示例获取 dirA/dirA3/dirA31:

xquery version "3.1" encoding "utf-8";

declare variable $files :=
<dir name="dirA">
<file name="fileA_F1"/>
<file name="fileA_F2"/>
<dir name="dirA1">
<file name="fileA1_F1"/>
<file name="fileA1_F2"/>
</dir>
<dir name="dirA2">
<file name="fileA2_F1"/>
<file name="fileA2_F2"/>
</dir>
<dir name="dirA3">
<file name="fileA3_F1"/>
<file name="fileA3_F2"/>
<file name="fileA3_F3"/>
<dir name="dirA31">
<file name="fileA31_F1"/>
<file name="fileA31_F2"/>
<file name="fileA31_F3"/>
</dir>
</dir>
</dir>;


let $path := trace(string-join($files//file[@name='fileA31_F2']/ancestor::dir/@name,'/'))

return()

此代码用于获取相反的顺序 dirA31/dirA3/dirA :

let $reversepath := trace(string-join(reverse(tokenize(string-join($files//file[@name='fileA31_F2']/ancestor::dir/@name,'/'),'/')),'/'))

我的意思是,是否还有任何其他以相反顺序遍历祖先的 XPath 或 XQuery 表达式?

注解:文件节点的name属性值是唯一的

最佳答案

使用 XPath 3.1 的新语法和 => 运算符 ( https://www.w3.org/TR/xpath-31/#id-arrow-operator )

let $file := $files//file[@name='fileA31_F2']
return
$file/ancestor::dir/@name => reverse() => string-join('/')

应该更紧凑和可读,但需要一段时间才能习惯。

关于xml - 使用 XQuery/XPath 获取祖先节点的逆序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57831538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com