1
for $i in cts:search(fn:collection()/article, $query)
    let $snippet :=  
        search:snippet( $i,.....)  

  order by if ($randomize) then ()   
     else if($sort-by = "ascending") then  
      xs:date($i/date_posted), cts:score($i)  
     else xs:date($i/date_posted) descending, cts:score($i) descending    

return
 element{"article"}
{ .....
  .....
  .....
}

問題:
上記の x-query ステートメントでは、order by 句に、if($randomize) then ()提供される出力が降順になるという条件があります。

ユーザーが提供するソートタイプに従って、昇順または降順で結果を引き出したいという要件があります。

しかし、上記のコードでは、私の x-query ステートメントは検証されません。

前もって感謝します、
~Prashant

4

1 に答える 1

2

残念ながら、XQuery のソート仕様は静的であり、XSLT よりもさらに静的です。昇順または降順の並べ替えを動的に切り替えたい場合、唯一の方法は並べ替えキーを逆にすることです。数字の場合は簡単です - (KEY) の代わりに -(KEY) を使用するだけです。日付についてもそれほど難しくありません - 将来の特定の日付から日付を引きます (まあ、実際には任意の日付)。文字列に対してこれを行う便利な方法は思いつきませんが、幸いなことに文字列を使用していないようです。

于 2012-05-24T12:56:04.687 に答える