【发布时间】: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 版本。