我有以下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 ...
但这显然不起作用。有任何想法吗?
答案 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)