【问题标题】:Filtering based on an attribute in deep level基于深层属性的过滤
【发布时间】:2021-07-02 05:53:49
【问题描述】:

在 BaseX 上运行 Xquery。

我想根据深层属性 (/BLA1/BLA2/BLA3) 进行过滤,但从过滤级别及其上一层 (/BLA1/BLA2) 返回属性。

所以,据我了解,我的“for”必须在上层 (/BLA1/BLA2) 上运行才能允许它。但我无法让过滤工作..当我尝试在更深层次上运行“for”时 - 它确实有效,但我无法从上层返回我需要的属性。

这个有效:我根据过滤得到所需的结果。

for $i in /BLA1/BLA2/BLA3
where $i/@AT1>1000 and $i/@AT2='XX'
return $i/data(@AT3)

这个不起作用,这意味着过滤器没有过滤,我得到 $i/BLA3/@AT2 不是 XX 的结果。

for $i in /BLA1/BLA2
where $i/BLA3/@AT1>1000 and $i/BLA3/@AT2='XX'
return $i/BLA3/data(@AT3)

我不明白为什么第二个不起作用...

这是我真正想要使用的,即从上层(/BLA1/BLA2)返回一个属性,从过滤级别(/BLA1/BLA2/BLA3)返回另一个属性

for $i in /BLA1/BLA2
where $i/BLA3/@AT1>1000 and $i/BLA3/@AT2='XX'
return $i/data(@AT4) || ' ' || $i/BLA3/data(@AT3)

任何帮助将不胜感激!

【问题讨论】:

  • $i/../@AT4 当然可以让你向上导航。
  • 至于为什么事情不起作用,请向我们展示输入数据、预期数据和您得到的两种不同结果的最小但完整的样本。同时告诉我们您使用的是哪个 BaseX 版本。

标签: xml xquery basex


【解决方案1】:

使用.. 向上导航,例如

for $i in /BLA1/BLA2/BLA3
where $i/@AT1>1000 and $i/@AT2='XX'
return $i/../data(@AT4) || ' ' || $i/data(@AT3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 2016-06-11
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2015-04-25
    • 2015-02-20
    相关资源
    最近更新 更多