XPath:收集聚合问题时收集

时间:2014-06-10 15:11:15

标签: xml xpath xpath-2.0

我有一个XML文件,结构如下:

<person height="170"/>
<person height="155"/>
<person height="192"/>
...
<tree height="100"/>
<tree height="300"/>
<tree height="120"/>

我需要归还所有至少有3棵树的人,其高度在人的身高范围内+ - 10.

例如,如果一个人的身高为155,如果至少有3棵树的高度在145到165之间,则该人将被退回。

我试图实现它并达到:

//person[count(//tree[@height >>>>>>is in range 10 to person's height<<<<<]) >= 3]

我无法实现内部部分。我尝试使用“当前”和“自我”,但我似乎没有正确使用它们。

1 个答案:

答案 0 :(得分:2)

这是您可以使用for $me in .成语的地方:

//person[count(for $me in . return //tree[
    @height <= ($me/@height + 10) and @height >= ($me/@height - 10)]) >= 3]

这里我使用单次迭代for表达式来捕获当前person(第一级谓词的.)所以我可以在第二级内引用它-level谓词(.tree)。