XQuery没有为Order by子句验证

时间:2012-05-24 12:01:58

标签: xpath xquery

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

1 个答案:

答案 0 :(得分:2)

不幸的是,XQuery中的排序规范是静态的,甚至比XSLT中的更多。如果要在升序或降序排序之间动态切换,唯一的方法是反转排序键。数字很​​容易 - 只需使用 - (KEY)而不是(KEY)。日期也不太难 - 从未来某个固定日期减去日期(嗯,实际上是任何日期)。我想不出为字符串做任何方便的方法,但幸运的是你似乎没有使用字符串。