[如需转载请注明出处]
条件表达式实现了XQuery的分支功能,它的语法如下:
if (expr1) then expr2 else expr3
if,then,else都是关键字。如果expr1的有效布尔值(Effective Boolean Value)为true,则条件表达式评估expr2,如果是false则评估expr3。
那么有效布尔值是什么概念呢?
一个操作数的有效布尔值就是对该操作数调用fn:boolean函数返回的布尔值,定义如下:
1。如果操作数是空序列,其有效布尔值为false
2。如果操作数是一个序列并且第一个项是节点,其有效布尔值为true
3。如果操作数就是xs:boolean值或继承自xs:boolean,则直接返回操作数本身
4。如果操作数是xs:string,xdt:untypedAtomic,或继承自它们,如果其长度为0则其有效布尔值为false,如果其长度大于0,那么其有效布尔值为true
5。如果操作数是数值类型或继承自数值类型,如果操作数的值为NaN,或值为0,其有效布尔值为false,否则为true
6。其他任何情况下都抛错
下面是两个例子:
<cheap_books> {
for $book in document(“catalog/books.xml”)/books/book
return
if ($book/price < 10)
then $book
else ()
} </cheap_books>
这个例子中要判断有效布尔值的操作数是一个比较表达式,比较price的值和10的大小。
下面这个例子则是判断title属性是否存在
if ($book/@title)
then $book/sale
else $book/retail