13.12 与序列类型有关的表达式
XQuery提供了4个常用的、对序列类型进行操作的运算符,这些运算符主要用于处理序列和序列类型之间的关系。
13.12.1 instance of
这里的instance of运算符和Java中的有点相似,它用于判断第一个操作数是否为第二个操作数所指定的类型。如果是,则返回true,否则将返回false。
instance of运算符的语法格式如下:
例如:
3 instance of xs:integer:返回true。
3 instance of xs:decimal:返回true。
"www.crazyit.org" instance of xs:string:返回true。
13.12.2 typeswitch
这个运算符和Java中的switch流程控制有点相似,但typeswitch不是判断指定表达式的值,而是判断其数据类型。
typeswitch表达式的语法格式如下:
typeswitch表达式先判断expression的数据类型,然后依次判断该表达式值是否为多个case子句中对应数据类型的值,上面的语法格式中还有一个可选的$var声明,这个表达式用于访问expression变量。如下XQuery查询示范了typeswitch表达式的用法:
程序清单:codes\13\13.12\typeswitch.xq
因为上面的"abc"是字符串类型的值,所以执行上面的XQuery查询后将返回如下结果:
13.12.3 cast
cast运算符用于将一个值转换为另一个类型的值,它需要两个操作数,其中前面一个操作数是需要进行类型转换的表达式,后面一个操作数是需要转换的目标类型。cast运算符的语法格式如下:
上面的语法格式的作用是将expression转换为type类型的变量。对于expression表达式所对应的序列,有如下3种可能的情况:
当expression是一个长度为0的序列时,如果type后有一个紧跟的问号(?),则可将该序列转换为空序列,否则将引发错误。
如果expression是一个长度为1的序列,XQuery将可正常进行转换。
如果expression是一个长度大于1的序列,则XQuery总是会引发错误。
例如:
程序清单:codes\13\13.12\cast.xq
执行上面的XQuery将返回如下结果:
从以上结果可以看出,在使用cast运算符对"123"进行类型转换后,它将转换为xs:integer类型,将不再是xs:string类型。
13.12.4 castable
castable运算符与cast运算符经常一起使用,在使用cast进行实际类型转换之前,应该先使用castable判断该变量是否可以转换为对应的类型,然后再进行实际转换。castable运算符的用法与cast运算符基本一致,只不过castable表达式最终将返回一个boolean值。
castable运算符的语法格式如下:
例如: