2013-04-09 69 views
1

我有以下XML:选择多个值并使用XQuery或XPath比较它们?

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

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

我已经试过类似的东西:

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

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

回答

2

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

这个查询将返回所有@min属性是满足下列条件:如果你想知道是否

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

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

如果你想使用satisfies,使用此查询所有元素满足条件,检查没有元素不履行它:

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

你甚至可以没有一个谓语(的XPath/XQuery的比较,有一组类似的语义,这意味着当且仅当一个@min值等于或大于一个@max值是true):

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

事情是我不想获得最小属性满足条件。我只想检查它们是否都满足了它(我正在测试Web服务的响应),所以我只需要一个真/假输出。 – 2013-04-09 11:44:01

+0

所有你需要做的就是把'not(...)'从谓词中拉出来。查看更新的答案。 – 2013-04-09 12:03:01

1

你没有表达你的要求非常清楚,但它听起来好像你想要最高的@min低于最低@max,这将是

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