小编Mar*_*mid的帖子

使用XQuery / XPath获取祖先节点的相反顺序

我正在寻找一个好的解决方案(简短表达,最佳性能),以在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()
Run Code Online (Sandbox Code Playgroud)

和此代码获得相反的顺序dirA31 / dirA3 / dirA

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

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

注释:文件节点的名称属性值是唯一的

xml xpath xquery basex xquery-3.1

2
推荐指数
1
解决办法
94
查看次数

标签 统计

basex ×1

xml ×1

xpath ×1

xquery ×1

xquery-3.1 ×1