XQuery表达式之条件表达式(Conditional Expression)

发表于:2007-06-22来源:作者:点击数: 标签:
[如需转载请注明出处] 条件表达式实现了XQuery的分支功能,它的语法如下: if (expr1) then expr2 else expr3 if,then,else都是关键字。如果expr1的有效布尔值(Effective Boolean Value)为true,则条件表达式评估expr2,如果是false则评估expr3。 那么有效布

   
  [如需转载请注明出处]
条件表达式实现了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

原文转自:http://www.ltesting.net