9.7 内置函数库

XPath内置了超过100个函数。这些内置函数用于字符串处理、数值处理、日期和时间处理、节点和QName 处理、序列处理和逻辑处理等,极大地扩展了XPath语言的功能。

实际上前面常常使用的position()、last()等函数就是XPath的内置函数。

9.7.1 字符串相关函数

XPath提供了大量字符串相关函数,这些函数有些是XPath 1.0内置的,有些是XPath 2.0内置的。表9.8列出了XPath内置的字符串相关函数。

表9.8 字符串相关函数

alt

alt

alt

alt

9.7.2 数值相关函数

数值相关函数主要用于进行各种复杂的数学计算,如abs用于求取绝对值等,这些数值相关的函数有些是XPath 1.0内置的,有些是XPath 2.0内置的。XPath内置的数值相关函数如表9.9所示。

表9.9 数值相关函数

alt

9.7.3 日期和时间相关函数

日期和时间相关函数不仅可以操作日期和时间等类型的值,还可以操作duration(持续时长)类型的值。这些日期和时间相关函数有些是XPath 1.0内置的,有些是XPath 2.0内置的。表9.10显示了XPath内置的日期和时间相关函数。

表9.10 日期和时间相关函数

alt

alt

alt

alt

alt

alt

9.7.4 boolean值相关函数

XPath里提供了一些boolean值相关的函数,这些函数的功能比较简单,用法也比较简单。表9.11显示了XPath提供的boolean值相关的函数。

表9.11 boolean值相关函数

alt

9.7.5 节点相关函数

XPath提供了一系列节点相关函数,这些函数主要用于提高访问XML节点的便捷性。这些节点相关的函数有些是XPath 1.0内置的,有些是XPath 2.0内置的。表9.12显示了XPath内置的节点相关的函数。

表9.12 节点相关函数

alt

上面的函数列表中最后一个data函数主要用于处理节点集,它会取出节点集中多个节点的值,将其组合成序列然后返回。假设有如下XML文档:

程序清单:codes\09\9.7\data.xml

alt

下面使用如下XSLT样式单来转换上面的XML文档:

程序清单:codes\09\9.7\data.xslt

alt

上面的XSLT使用data()函数处理了item XPath表达式代表的节点集,也就是位于<list…/>节点内的3个<item…/>子节点。data()函数将把这3个<item…/>子节点的值提取成包含3项的序列。使用上面的XSLT样式单转换上面的XML文档,可看到图9.4所示结果。

alt

图9.4 使用data函数将节点集转换为序列

9.7.6 序列相关函数

由于XPath 2.0使用了序列来代替节点集,而且序列既可以包含多项,也可以只包含一项,因此序列在XPath 2.0中的作用非常大。XPath提供了大量序列相关的函数。表9.13列出了序列相关的通用函数。

表9.13 序列相关的通用函数

alt

alt

表9.14列出了判断序列里包含多少项的函数。

表9.14 测试序列包含多少项的函数

alt

表9.15列出了对序列里的项进行统计计算的函数。

表9.15 统计函数

alt