选择多个值并使用XQuery或XPath进行比较?

时间:2013-04-09 10:50:10

标签: xpath xquery

我有以下XML:

<items>
 <item min="1" max="3"> </item>
 <item min="2" max="7"> </item>
 <item min="1" max="2"> </item>
</items>

如果min总是小于max,我需要检查每个项目。此输入的预期输出为false,因为@min="2"不小于@max="2"

我尝试过类似的东西:

every $min,$max  in //item/@min, //item/@max satisfies ...

但这显然不起作用。有任何想法吗?

2 个答案:

答案 0 :(得分:2)

您无需使用satisfies,只需反转条件并使用not(...)

此查询将返回满足条件的所有@min属性:

//item/@min[not(. >= //item/@max)]

如果您想使用satisfies,请使用此查询:

//item/@min[every $max in //item/@max satisfies . < $max]

如果您想知道所有元素是否满足条件,请检查没有元素不符合条件:

not(//item/@min[. >= //item/@max])

你甚至可以没有谓词(XPath / XQuery比较具有类似集合的语义,如果一个@min值等于或大于一个@max值,则表示这是真的:

not(//item/@min >= //item/@max)

答案 1 :(得分:1)

您没有非常清楚地表达您的要求,但听起来好像您希望最高@min小于最低@max,这将是

max(item/@min) lt min(item/@max)