1

我有以下 XML:

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

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

我试过类似的东西:

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

但这显然行不通。有任何想法吗?

4

2 回答 2

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)
于 2013-04-09T11:30:01.100 回答
1

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

max(item/@min) lt min(item/@max)
于 2013-04-09T14:04:11.220 回答