2
如何控制從for $x in (...)
選擇的順序?在下面的XQuery的最後一行中,我想要的結果是按照$retmax
,$retmin
的順序排列,但是它以相反的順序出現。從序列控制選擇順序
<result>
{
let $max := max(doc("countries.xml")//country/(@population div @area))
let $min := min(doc("countries.xml")//country/(@population div @area))
for $country in doc("countries.xml")//country
let $density := $country/(@population div @area)
let $ret_min := if ($density = $min)
then <lowest density="{$density}">{data($country/@name)}</lowest>
else()
let $ret_max := if ($density = $max)
then <highest density="{$density}">{data($country/@name)}</highest>
else()
for $r in ($ret_max, $ret_min) return $r
}
</result>
生產:
<result>
<lowest density="0.026752619966905682">Greenland</lowest>
<highest density="31052.3125">Macau</highest>
</result>
,但我想:
<result>
<highest density="31052.3125">Macau</highest>
<lowest density="0.026752619966905682">Greenland</lowest>
</result>
這種複雜的代碼,必然有一個邏輯錯誤 - 它不在'$ r中($ ret_max,$ ret_min)返回$ r',順便說一句,寫的只是'($ ret_max,$ ret_min)'的不自然的方式 - 問題出現在複雜的環境表達中。因此,這個問題的標題是不恰當的 - 一個更好的標題將是:「請在我的邏輯中找到錯誤」 - 這不符合與XQuery相關的問題。 – 2012-07-29 14:44:01
我試圖'返回($ ret_max,$ ret_min)',但它不起作用。 – 2012-07-29 19:02:55
Rose Perrone,試試這個查詢:'for $ r in(7,2)return $ r'結果是'7 2'。嘗試相同的方法,但用'7'和'2'替換爲節點值 - 同樣,結果是節點按它們在表達式中出現的順序排列。這不是令人驚訝的,它來自Xpath數據模型中序列的定義。這意味着,在你的問題表達式中提供的,在$($ ret_max,$ ret_min)'中圍繞$ r的子表達式的邏輯存在一些問題。 – 2012-07-29 19:55:41