2013-04-09 68 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)