跳转到内容

XQuery/妙招

来自 Wikibooks,开放世界中的开放书籍

表达式中的冗余

[编辑 | 编辑源代码]
let $r := if ($x = 1) then true() else false();

最好是

let $r := ($x = 1)

 for $p in (0 to string-length($arg1)) return $p

最好是

 (0 to string-length($arg1))

 for $i in (1 to 5)
 return
     for $j in (11 to 15)
     return
         ($i, $j)

最好是

 for $i in (1 to 5), $j in (11 to 15)
 return
     ($i, $j)

或者

 for $i in (1 to 5) 
 for $j in (11 to 15)
 return
     ($i, $j)

所有这三种都返回

 (1 11 1 12 1 13 1 14 1 15 2 11 2 12 2 13...)

XPath 谓词比 where 子句更清晰、更快

[编辑 | 编辑源代码]
 for $x in //Page 
 where $x/heading = 1
 return $x

最好是

 //Page[heading = 1]

默认值

[编辑 | 编辑源代码]
 if (exists($a)) then $a else "Default" 

最好是

 ($a,"Default") [1]

或者用于项序列

 ($list1, "Default"[empty($list1)])

或者另一个可能的用于序列

 (<test/>,<test/>,<default/>)[not(position() = last() and not(last() = 1))]

任何数量的级联默认值都可以通过这种方式处理。

与 SQL 中的 "COALESCE" 相比较

华夏公益教科书