XSLT, XPath, and XQuery 函数
XSLT 2.0、XPath 2.0 和 XQuery 1.0 共享相同的函数库。
函数参考
函数命名空间的默认前缀是 fn:
函数命名空间的URI是:http://www.w3.org/2005/xpath-functions
提示: 函数通常以 fn: 前缀调用,例如 fn:string()。 但是由于 fn: 是命名空间的默认前缀,所以函数名在调用时不需要加前缀。
Accessor 访问器函数
名称 | 描述 |
---|---|
fn:node-name(node) | 返回参数节点的节点名 |
fn:nilled(node) | 返回一个布尔值,指示参数节点是否为空 |
fn:data(item.item,...) | 获取一个项目序列并返回一个原子值序列 |
fn:base-uri() fn:base-uri(node) |
返回当前或指定节点的base-uri属性值 |
fn:document-uri(node) | 返回指定节点的document-uri属性值 |
错误和跟踪函数
名称 | 描述 |
---|---|
fn:error() fn:error(error) fn:error(error,description) fn:error(error,description,error-object) |
示例: error(fn:QName('http://example.com/test', 'err:toohigh'), 'Error: Price is too high')
Result: Returns http://example.com/test#toohigh and the string "Error: Price is too high" to the external processing environment |
fn:trace(value,label) | 用于调试查询 |
数值函数
名称 | 描述 |
---|---|
fn:number(arg) | 返回参数的数值。 参数可以是布尔值、字符串或节点集
示例:number('100') |
fn:abs(num) | 返回参数的绝对值
示例: abs(3.14) 示例: abs(-3.14) |
fn:ceiling(num) | 返回大于 number 参数的最小整数
示例: ceiling(3.14) |
fn:floor(num) | 返回不大于 number 参数的最大整数
示例: floor(3.14) |
fn:round(num) | 将数字参数四舍五入为最接近的整数
示例: round(3.14) |
fn:round-half-to-even() | 示例: round-half-to-even(0.5) 结果: 0 示例: round-half-to-even(1.5) 示例: round-half-to-even(2.5) |
字符串函数
名称 | 描述 |
---|---|
fn:string(arg) | 返回参数的字符串值。 参数可以是数字、布尔值或节点集
示例: string(314) |
fn:codepoints-to-string((int,int,...)) | 从 Unicode 标准代码点序列创建字符串
示例: codepoints-to-string((84, 104, 233, 114, 232, 115, 101)) |
fn:string-to-codepoints(string) | 从字符串返回 Unicode 标准代码点的序列
示例: string-to-codepoints("Thérèse") |
fn:codepoint-equal(comp1,comp2) | 如果 comp1 的值等于 comp2 的值,则根据 Unicode 代码点排序规则(http://www.w3.org/2005/02/xpath-functions/collation/codepoint)返回 true,否则返回 false |
fn:compare(comp1,comp2) fn:compare(comp1,comp2,collation) |
如果 comp1 小于 comp2,则返回 -1,如果 comp1 等于 comp2,则返回 0,如果 comp1 大于 comp2,则返回 1(根据所使用的排序规则)
示例: compare('ghi', 'ghi') |
fn:concat(string,string,...) | 返回字符串的连接
示例: concat('XPath ','is ','FUN!') |
fn:string-join((string,string,...),sep) | 返回通过连接字符串参数并使用 sep 参数作为分隔符创建的字符串
示例: string-join(('We', 'are', 'having', 'fun!'), ' ') 示例: string-join(('We', 'are', 'having', 'fun!')) 示例:string-join((), 'sep') |
fn:substring(string,start,len) fn:substring(string,start) |
返回从起始位置到指定长度的子字符串。 第一个字符的索引为 1。如果省略长度,则返回从开始位置到结束的子字符串
示例: substring('Beatles',1,4) 示例: substring('Beatles',2) |
fn:string-length(string) fn:string-length() |
返回指定字符串的长度。 如果没有字符串参数,则返回当前节点的字符串值的长度
示例: string-length('Beatles') |
fn:normalize-space(string) fn:normalize-space() |
从指定字符串中删除前导和尾随空格,并将所有内部空格序列替换为 1 并返回结果。 如果没有字符串参数,则在当前节点上执行相同的操作
示例: normalize-space(' The XML ') |
fn:normalize-unicode() | |
fn:upper-case(string) | 将字符串参数转换为大写
示例: upper-case('The XML') |
fn:lower-case(string) | 将字符串参数转换为小写
示例: lower-case('The XML') |
fn:translate(string1,string2,string3) | 通过将 string2 中的字符替换为 string3 中的字符来转换 string1
示例: translate('12:30','30','45') 示例: translate('12:30','03','54') 示例: translate('12:30','0123','abcd') |
fn:escape-uri(stringURI,esc-res) | 示例: escape-uri("http://example.com/test#car", true()) 结果: "http%3A%2F%2Fexample.com%2Ftest#car" 示例: escape-uri("http://example.com/test#car", false()) 示例: escape-uri ("http://example.com/~bébé", false()) |
fn:contains(string1,string2) | 如果 string1 包含 string2,则返回 true,否则返回 false
示例: contains('XML','XM') |
fn:starts-with(string1,string2) | 如果 string1 以 string2 开头,则返回 true,否则返回 false
示例: starts-with('XML','X') |
fn:ends-with(string1,string2) | 如果 string1 以 string2 结尾,则返回 true,否则返回 false
示例: ends-with('XML','X') |
fn:substring-before(string1,string2) | 在 string2 出现之前返回 string1 的开始
示例: substring-before('12/10','/') |
fn:substring-after(string1,string2) | 返回 string1 中出现 string2 后的剩余部分
示例: substring-after('12/10','/') |
fn:matches(string,pattern) | 如果字符串参数与模式匹配,则返回 true,否则返回 false
示例: matches("Merano", "ran") |
fn:replace(string,pattern,replace) | 返回通过用替换参数替换给定模式创建的字符串
示例: replace("Bella Italia", "l", "*") 示例: replace("Bella Italia", "l", "") |
fn:tokenize(string,pattern) | 示例: tokenize("XPath is fun", "\s+") 结果: ("XPath", "is", "fun") |
anyURI 的函数
名称 | 描述 |
---|---|
fn:resolve-uri(relative,base) |
布尔值函数
名称 | 描述 |
---|---|
fn:boolean(arg) | 返回数字、字符串或节点集的布尔值 |
fn:not(arg) | 通过应用 boolean() 函数,首先将参数简化为布尔值。
如果布尔值为假,则返回真,如果布尔值为真,则返回假
示例: not(true()) |
fn:true() | 返回布尔值 true
示例: true() |
fn:false() | 返回布尔值 false
示例: false() |
关于持续时间、日期和时间的函数
持续时间、日期和时间的组件提取函数
名称 | 描述 |
---|---|
fn:dateTime(date,time) | 将参数转换为日期和时间 |
fn:years-from-duration(datetimedur) | 返回一个整数,表示参数值的规范词法表示中的年份分量 |
fn:months-from-duration(datetimedur) | 返回一个整数,表示参数值的规范词法表示中的月份组件 |
fn:days-from-duration(datetimedur) | 返回一个整数,表示参数值的规范词法表示中的天分量 |
fn:hours-from-duration(datetimedur) | 返回一个整数,表示参数值的规范词法表示中的小时分量 |
fn:minutes-from-duration(datetimedur) | 返回一个整数,表示参数值的规范词法表示中的分钟分量 |
fn:seconds-from-duration(datetimedur) | 返回一个小数,表示参数值的规范词法表示中的秒分量 |
fn:year-from-dateTime(datetime) | 返回一个整数,表示参数本地化值中的年份分量
示例: year-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:month-from-dateTime(datetime) | 返回一个整数,该整数表示参数的本地化值中的月份分量
示例: month-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:day-from-dateTime(datetime) | 返回一个整数,该整数表示参数的本地化值中的天分量
示例: day-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:hours-from-dateTime(datetime) | 返回一个整数,表示参数的本地化值中的小时分量
示例: hours-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:minutes-from-dateTime(datetime) | 返回一个整数,表示参数的本地化值中的分钟分量
示例: minutes-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:seconds-from-dateTime(datetime) | 返回一个小数,表示参数的本地化值中的秒分量
示例: seconds-from-dateTime(xs:dateTime("2005-01-10T12:30:00-04:10")) |
fn:timezone-from-dateTime(datetime) | 返回参数的时区分量(如果有) |
fn:year-from-date(date) | 返回一个整数,表示参数的本地化值中的年份
示例: year-from-date(xs:date("2005-04-23")) |
fn:month-from-date(date) | 返回一个整数,表示参数的本地化值中的月份
示例: month-from-date(xs:date("2005-04-23")) |
fn:day-from-date(date) | 返回一个整数,表示参数的本地化值中的日期
示例: day-from-date(xs:date("2005-04-23")) |
fn:timezone-from-date(date) | 返回参数的时区分量(如果有) |
fn:hours-from-time(time) | 返回一个整数,表示参数的本地化值中的小时分量
示例: hours-from-time(xs:time("10:22:00")) |
fn:minutes-from-time(time) | 返回一个整数,表示参数的本地化值中的分钟分量
示例: minutes-from-time(xs:time("10:22:00")) |
fn:seconds-from-time(time) | 返回一个整数,表示参数的本地化值中的秒分量
示例: seconds-from-time(xs:time("10:22:00")) |
fn:timezone-from-time(time) | 返回参数的时区分量(如果有) |
fn:adjust-dateTime-to-timezone(datetime,timezone) | 如果 timezone 参数为空,则返回没有时区的 dateTime。 否则,它返回一个带有时区的 dateTime |
fn:adjust-date-to-timezone(date,timezone) | 如果 timezone 参数为空,则返回没有时区的日期。 否则,它返回带有时区的日期 |
fn:adjust-time-to-timezone(time,timezone) | 如果 timezone 参数为空,则返回没有时区的时间。 否则,它返回一个带时区的时间 |
与 QNames 相关的函数
名称 | 描述 |
---|---|
fn:QName() | |
fn:local-name-from-QName() | |
fn:namespace-uri-from-QName() | |
fn:namespace-uri-for-prefix() | |
fn:in-scope-prefixes() | |
fn:resolve-QName() |
节点上的函数
名称 | 描述 |
---|---|
fn:name() fn:name(nodeset) |
返回当前节点的名称或指定节点集中的第一个节点 |
fn:local-name() fn:local-name(nodeset) |
返回当前节点的名称或指定节点集中的第一个节点 - 不带命名空间前缀 |
fn:namespace-uri() fn:namespace-uri(nodeset) |
返回当前节点或指定节点集中第一个节点的命名空间URI |
fn:lang(lang) | 如果当前节点的语言与指定语言的语言匹配,则返回 true
示例: Lang("en") is true for 示例: Lang("de") is false for |
fn:root() fn:root(node) |
返回当前节点或指定节点所属的树的根。 这通常是一个文档节点 |
序列上的函数
序列的一般函数
名称 | 描述 |
---|---|
fn:index-of((item,item,...),searchitem) | 返回等于 searchitem 参数的项目序列中的位置
示例: index-of ((15, 40, 25, 40, 10), 40) 示例: index-of (("a", "dog", "and", "a", "duck"), "a") 示例: index-of ((15, 40, 25, 40, 10), 18) |
fn:remove((item,item,...),position) | 返回从项目参数的值构造的新序列 - 删除了位置参数指定的项目
示例: remove(("ab", "cd", "ef"), 0) 示例: remove(("ab", "cd", "ef"), 1) 示例: remove(("ab", "cd", "ef"), 4) |
fn:empty(item,item,...) | 如果参数的值为空序列,则返回 true,否则返回 false
示例: empty(remove(("ab", "cd"), 1)) |
fn:exists(item,item,...) | 如果参数的值不是空序列,则返回 true,否则返回 false
示例: exists(remove(("ab"), 1)) |
fn:distinct-values((item,item,...),collation) | Returns only distinct (different) values
示例: distinct-values((1, 2, 3, 1, 2)) |
fn:insert-before((item,item,...),pos,inserts) | 返回从 item 参数的值构造的新序列 - inserts 参数的值插入到 pos 参数指定的位置
示例: insert-before(("ab", "cd"), 0, "gh") 示例: insert-before(("ab", "cd"), 1, "gh") 示例: insert-before(("ab", "cd"), 2, "gh") 示例: insert-before(("ab", "cd"), 5, "gh") |
fn:reverse((item,item,...)) | 返回指定项目的相反顺序
示例: reverse(("ab", "cd", "ef")) 示例: reverse(("ab")) |
fn:subsequence((item,item,...),start,len) | 从 start 参数指定的位置返回一系列项目,并继续 len 参数指定的项目数。 第一项位于位置 1
示例: subsequence(($item1, $item2, $item3,...), 3) 示例: subsequence(($item1, $item2, $item3, ...), 2, 2) |
fn:unordered((item,item,...)) | 以实现相关的顺序返回项目 |
测试序列基数的函数
名称 | 描述 |
---|---|
fn:zero-or-one(item,item,...) | 如果参数包含零或一项,则返回参数,否则会引发错误 |
fn:one-or-more(item,item,...) | 如果它包含一个或多个项目,则返回参数,否则会引发错误 |
fn:exactly-one(item,item,...) | 如果参数只包含一项,则返回参数,否则会引发错误 |
等于、并集、交集和除外
名称 | 描述 |
---|---|
fn:deep-equal(param1,param2,collation) | 如果 param1 和 param2 彼此深度相等,则返回 true,否则返回 false |
聚合函数
名称 | 描述 |
---|---|
fn:count((item,item,...)) | 返回节点数 |
fn:avg((arg,arg,...)) | 返回参数值的平均值
示例: avg((1,2,3)) |
fn:max((arg,arg,...)) | 返回大于其他参数的参数
示例: max((1,2,3)) 示例: max(('a', 'k')) |
fn:min((arg,arg,...)) | 返回小于其他参数的参数
示例: min((1,2,3)) 示例: min(('a', 'k')) |
fn:sum(arg,arg,...) | 返回指定节点集中每个节点的数值之和 |
生成序列的函数
名称 | 描述 |
---|---|
fn:id((string,string,...),node) | 返回 ID 值等于字符串参数中指定的一个或多个值的值的元素节点序列 |
fn:idref((string,string,...),node) | 返回一系列元素或属性节点,其 IDREF 值等于字符串参数中指定的一个或多个值的值 |
fn:doc(URI) | |
fn:doc-available(URI) | 如果 doc() 函数返回一个文档节点,则返回 true,否则返回 false |
fn:collection() fn:collection(string) |
上下文函数
名称 | 描述 |
---|---|
fn:position() | 返回当前正在处理的节点的索引位置
示例: //book[position()<=3] |
fn:last() | 返回已处理节点列表中的项目数
示例: //book[last()] |
fn:current-dateTime() | 返回当前日期时间(带时区) |
fn:current-date() | 返回当前日期(带时区) |
fn:current-time() | 返回当前时间(带时区) |
fn:implicit-timezone() | 返回隐式时区的值 |
fn:default-collation() | 返回默认排序规则的值 |
fn:static-base-uri() | 返回base-uri的值 |
XSLT 函数
此外,还有以下内置的 XSLT 函数:
名称 | 描述 |
---|---|
current() | 返回当前节点 |
document() | 用于访问外部 XML 文档中的节点 |
element-available() | 测试指定的元素是否被 XSLT 处理器支持 |
format-number() | 将数字转换为字符串 |
function-available() | 测试指定的函数是否被 XSLT 处理器支持 |
generate-id() | 返回唯一标识指定节点的字符串值 |
key() | 使用由 <xsl:key> 指定的索引返回一个节点集。元素 |
system-property() | 返回系统属性的值 |
unparsed-entity-uri() | 返回未解析实体的 URI |