XSLT、XPath 和 XQuery 函数
XSLT 2.0、XPath 2.0 和 XQuery 1.0 共享相同的函数库。
函数参考
函数命名空间的默认前缀是 fn
函数命名空间的 URI 是: http://www.w3.org/2005/xpath-functions
提示:函数通常带有 fn: 前缀调用,例如 fn:string()。但是,由于 fn: 是命名空间的默认前缀,因此调用函数时不需要加上前缀。
访问器函数
名称 | 描述 |
---|---|
fn:node-name(节点) | 返回参数节点的节点名称 |
fn:nilled(节点) | 返回一个布尔值,指示参数节点是否为 nilled(空值) |
fn:data(项.项,...) | 接收一个项序列并返回一个原子值序列 |
fn:base-uri() fn:base-uri(节点) |
返回当前节点或指定节点的 base-uri 属性的值 |
fn:document-uri(节点) | 返回指定节点的 document-uri 属性的值 |
错误和跟踪函数
名称 | 描述 |
---|---|
fn:error() fn:error(错误) fn:error(错误,描述) fn:error(错误,描述,错误对象) |
示例: error(fn:QName('http://example.com/test', 'err:toohigh'), 'Error: Price is too high') 结果:返回 http://example.com/test#toohigh 和字符串 "Error: Price is too high" 到外部处理环境 |
fn:trace(值,标签) | 用于调试查询 |
数值函数
名称 | 描述 |
---|---|
fn:number(参数) | 返回参数的数值。参数可以是布尔值、字符串或节点集 示例: number('100') |
fn:abs(数字) | 返回参数的绝对值 示例: abs(3.14) 示例: abs(-3.14) |
fn:ceiling(数字) | 返回大于数字参数的最小整数 示例: ceiling(3.14) |
fn:floor(数字) | 返回不大于数字参数的最大整数 示例: floor(3.14) |
fn:round(数字) | 将数字参数四舍五入到最接近的整数 示例: 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(参数) | 返回参数的字符串值。参数可以是数字、布尔值或节点集 示例: string(314) |
fn:codepoints-to-string((整数,整数,...)) | 从 Unicode 标准码点序列创建字符串 示例: codepoints-to-string((84, 104, 233, 114, 232, 115, 101)) |
fn:string-to-codepoints(字符串) | 从字符串返回 Unicode 标准码点序列 示例: string-to-codepoints("Thérèse") |
fn:codepoint-equal(比较1,比较2) | 如果 comp1 的值等于 comp2 的值,则根据 Unicode 码点排序规则(http://www.w3.org/2005/02/xpath-functions/collation/codepoint),返回 true,否则返回 false |
fn:compare(比较1,比较2) fn:compare(比较1,比较2,排序) |
返回 -1 如果 comp1 小于 comp2,0 如果 comp1 等于 comp2,或 1 如果 comp1 大于 comp2(根据所使用的排序规则) 示例: compare('ghi', 'ghi') |
fn:concat(字符串,字符串,...) | 返回字符串的连接 示例: concat('XPath ','is ','FUN!') |
fn:string-join((字符串,字符串,...),分隔符) | 返回一个字符串,该字符串是通过连接字符串参数并使用 sep 参数作为分隔符创建的 示例: string-join(('We', 'are', 'having', 'fun!'), ' ') 示例: string-join(('We', 'are', 'having', 'fun!')) 示例:string-join((), 'sep') |
fn:substring(字符串,开始位置,长度) fn:substring(字符串,开始位置) |
返回从开始位置到指定长度的子字符串。第一个字符的索引是 1。如果省略长度,则返回从开始位置到末尾的子字符串 示例: substring('Beatles',1,4) 示例: substring('Beatles',2) |
fn:string-length(字符串) fn:string-length() |
返回指定字符串的长度。如果没有字符串参数,则返回当前节点的字符串值长度 示例: string-length('Beatles') |
fn:normalize-space(字符串) fn:normalize-space() |
删除指定字符串开头和结尾的空格,并将内部所有连续的空白字符替换为一个,然后返回结果。如果没有字符串参数,则对当前节点执行相同的操作 示例: normalize-space(' The XML ') |
fn:normalize-unicode() | |
fn:upper-case(字符串) | 将字符串参数转换为大写 示例: upper-case('The XML') |
fn:lower-case(字符串) | 将字符串参数转换为小写 示例: lower-case('The XML') |
fn:translate(字符串1,字符串2,字符串3) | 通过将 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(字符串1,字符串2) | 如果 string1 包含 string2,则返回 true,否则返回 false 示例: contains('XML','XM') |
fn:starts-with(字符串1,字符串2) | 如果 string1 以 string2 开头,则返回 true,否则返回 false 示例: starts-with('XML','X') |
fn:ends-with(字符串1,字符串2) | 如果 string1 以 string2 结尾,则返回 true,否则返回 false 示例: ends-with('XML','X') |
fn:substring-before(字符串1,字符串2) | 返回 string1 中 string2 出现之前的开始部分 示例: substring-before('12/10','/') |
fn:substring-after(字符串1,字符串2) | 返回 string1 中 string2 出现之后的剩余部分 示例: substring-after('12/10','/') |
fn:matches(字符串,模式) | 如果字符串参数匹配模式,则返回 true,否则返回 false 示例: matches("Merano", "ran") |
fn:replace(字符串,模式,替换) | 返回一个字符串,该字符串是通过将给定模式替换为 replace 参数创建的 示例: replace("Bella Italia", "l", "*") 示例: replace("Bella Italia", "l", "") |
fn:tokenize(字符串,模式) | 示例: tokenize("XPath is fun", "\s+") 结果: ("XPath", "is", "fun") |
anyURI 函数
名称 | 描述 |
---|---|
fn:resolve-uri(相对路径,基路径) |
布尔值函数
名称 | 描述 |
---|---|
fn:boolean(参数) | 为数字、字符串或节点集返回布尔值 |
fn:not(参数) | 参数首先通过应用 boolean() 函数转换为布尔值。如果布尔值为 false,则返回 true;如果布尔值为 true,则返回 false 示例: not(true()) |
fn:true() | 返回布尔值 true 示例: true() |
fn:false() | 返回布尔值 false 示例: false() |
持续时间、日期和时间函数
持续时间、日期和时间的组件提取函数
名称 | 描述 |
---|---|
fn:dateTime(日期,时间) | 将参数转换为日期和时间 |
fn:years-from-duration(日期时间时长) | 返回一个整数,表示参数值规范词法表示中的年份组件 |
fn:months-from-duration(日期时间时长) | 返回一个整数,表示参数值规范词法表示中的月份组件 |
fn:days-from-duration(日期时间时长) | 返回一个整数,表示参数值规范词法表示中的天数组件 |
fn:hours-from-duration(日期时间时长) | 返回一个整数,表示参数值规范词法表示中的小时组件 |
fn:minutes-from-duration(日期时间时长) | 返回一个整数,表示参数值规范词法表示中的分钟组件 |
fn:seconds-from-duration(日期时间时长) | 返回一个十进制数,表示参数值规范词法表示中的秒组件 |
fn:year-from-dateTime(日期时间) | 返回一个整数,表示参数本地化值中的年份组件 示例: year-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:month-from-dateTime(日期时间) | 返回一个整数,表示参数本地化值中的月份组件 示例: month-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:day-from-dateTime(日期时间) | 返回一个整数,表示参数本地化值中的天数组件 示例: day-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:hours-from-dateTime(日期时间) | 返回一个整数,表示参数本地化值中的小时组件 示例: hours-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:minutes-from-dateTime(日期时间) | 返回一个整数,表示参数本地化值中的分钟组件 示例: minutes-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10")) |
fn:seconds-from-dateTime(日期时间) | 返回一个十进制数,表示参数本地化值中的秒组件 示例: seconds-from-dateTime(xs:dateTime("2005-01-10T12:30:00-04:10")) |
fn:timezone-from-dateTime(日期时间) | 返回参数的时区组件(如果存在) |
fn:year-from-date(日期) | 返回一个整数,表示参数本地化值中的年份 示例: year-from-date(xs:date("2005-04-23")) |
fn:month-from-date(日期) | 返回一个整数,表示参数本地化值中的月份 示例: month-from-date(xs:date("2005-04-23")) |
fn:day-from-date(日期) | 返回一个整数,表示参数本地化值中的日期 示例: day-from-date(xs:date("2005-04-23")) |
fn:timezone-from-date(日期) | 返回参数的时区组件(如果存在) |
fn:hours-from-time(时间) | 返回一个整数,表示参数本地化值中的小时组件 示例: hours-from-time(xs:time("10:22:00")) |
fn:minutes-from-time(时间) | 返回一个整数,表示参数本地化值中的分钟组件 示例: minutes-from-time(xs:time("10:22:00")) |
fn:seconds-from-time(时间) | 返回一个整数,表示参数本地化值中的秒组件 示例: seconds-from-time(xs:time("10:22:00")) |
fn:timezone-from-time(时间) | 返回参数的时区组件(如果存在) |
fn:adjust-dateTime-to-timezone(日期时间,时区) | 如果 timezone 参数为空,则返回一个不带时区的 dateTime。否则,返回一个带时区的 dateTime |
fn:adjust-date-to-timezone(日期,时区) | 如果 timezone 参数为空,则返回一个不带时区的 date。否则,返回一个带时区的 date |
fn:adjust-time-to-timezone(时间,时区) | 如果 timezone 参数为空,则返回一个不带时区的时间。否则,返回一个带时区的时间 |
与 QName 相关的函数
名称 | 描述 |
---|---|
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(节点集) |
返回当前节点或指定节点集中的第一个节点的名称 |
fn:local-name() fn:local-name(节点集) |
返回当前节点或指定节点集中的第一个节点的名称 - 不带命名空间前缀 |
fn:namespace-uri() fn:namespace-uri(节点集) |
返回当前节点或指定节点集中的第一个节点的命名空间 URI |
fn:lang(语言) | 如果当前节点的语言与指定语言的语言匹配,则返回 true 示例: Lang("en") 对于 示例: Lang("de") 对于 |
fn:root() fn:root(节点) |
返回当前节点或指定节点所属的树的根。这通常是一个文档节点 |
序列函数
序列通用函数
名称 | 描述 |
---|---|
fn:index-of((项,项,...),搜索项) | 返回序列中等于 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 参数的值构造的新序列 - 移除了由 position 参数指定的项 示例: remove(("ab", "cd", "ef"), 0) 示例: remove(("ab", "cd", "ef"), 1) 示例: remove(("ab", "cd", "ef"), 4) |
fn:empty(项,项,...) | 如果参数的值是空序列,则返回 true,否则返回 false 示例: empty(remove(("ab", "cd"), 1)) |
fn:exists(项,项,...) | 如果参数的值不是空序列,则返回 true,否则返回 false 示例: exists(remove(("ab"), 1)) |
fn:distinct-values((项,项,...),排序) | 只返回不同的(不重复的)值 示例: distinct-values((1, 2, 3, 1, 2)) |
fn:insert-before((项,项,...),位置,插入项) | 返回一个由 item 参数的值构造的新序列 - 在由 pos 参数指定的插入位置插入 inserts 参数的值 示例: 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((项,项,...)) | 返回指定项的逆序 示例: reverse(("ab", "cd", "ef")) 示例: reverse(("ab")) |
fn:subsequence((项,项,...),开始位置,长度) | 返回一个项序列,从 start 参数指定的开始位置开始,持续 len 参数指定的项数。第一个项位于位置 1 示例: subsequence(($item1, $item2, $item3,...), 3) 示例: subsequence(($item1, $item2, $item3, ...), 2, 2) |
fn:unordered((项,项,...)) | 以依赖于实现的顺序返回项 |
测试序列基数的函数
名称 | 描述 |
---|---|
fn:zero-or-one(项,项,...) | 如果参数包含零个或一个项,则返回该参数,否则引发错误 |
fn:one-or-more(项,项,...) | 如果参数包含一个或多个项,则返回该参数,否则引发错误 |
fn:exactly-one(项,项,...) | 如果参数恰好包含一个项,则返回该参数,否则引发错误 |
等于、并集、交集和差集
名称 | 描述 |
---|---|
fn:deep-equal(参数1,参数2,排序) | 如果 param1 和 param2 深度相等,则返回 true,否则返回 false |
聚合函数
名称 | 描述 |
---|---|
fn:count((项,项,...)) | 返回节点计数 |
fn:avg((参数,参数,...)) | 返回参数值的平均值 示例: avg((1,2,3)) |
fn:max((参数,参数,...)) | 返回大于其他参数的参数 示例: max((1,2,3)) 示例: max(('a', 'k')) |
fn:min((参数,参数,...)) | 返回小于其他参数的参数 示例: min((1,2,3)) 示例: min(('a', 'k')) |
fn:sum(参数,参数,...) | 返回指定节点集中每个节点的数值之和 |
生成序列的函数
名称 | 描述 |
---|---|
fn:id((字符串,字符串,...),节点) | 返回具有 ID 值等于字符串参数中一个或多个值之一的元素节点序列 |
fn:idref((字符串,字符串,...),节点) | 返回具有 IDREF 值等于字符串参数中一个或多个值之一的元素或属性节点序列 |
fn:doc(URI) | |
fn:doc-available(URI) | 如果 doc() 函数返回一个文档节点,则返回 true,否则返回 false |
fn:collection() fn:collection(字符串) |
上下文函数
名称 | 描述 |
---|---|
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 |