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(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') 结果:将 http://example.com/test#toohigh 和字符串 "Error: Price is too high" 返回到外部处理环境 |
fn:trace(value,label) | 用于调试查询 |
数值函数
名称 | 描述 |
---|---|
fn:number(arg) | 返回参数的数值。参数可以是布尔值、字符串或节点集 示例:number('100') |
fn:abs(num) | 返回参数的绝对值 示例:abs(3.14) 示例:abs(-3.14) |
fn:ceiling(num) | 返回大于数字参数的最小整数 示例:ceiling(3.14) |
fn:floor(num) | 返回不大于数字参数的最大整数 示例: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() |
删除指定字符串前后的空格,并将所有内部空格序列替换为一个空格,然后返回结果。如果没有字符串参数,则对当前节点执行相同的操作。 示例: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 中之前 string1 的开头部分。 示例:substring-before('12/10','/') |
fn:substring-after(string1,string2) | 返回 string2 出现在 string1 中之后 string1 的剩余部分。 示例: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") |
任何URI 的函数
名称 | 描述 |
---|---|
fn:resolve-uri(relative,base) |
布尔值函数
名称 | 描述 |
---|---|
fn:boolean(arg) | 为数字、字符串或节点集返回布尔值。 |
fn:not(arg) | 首先通过应用 boolean() 函数将参数简化为布尔值。如果布尔值为 false,则返回 true,如果布尔值为 true,则返回 false。 示例: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 或指定节点集中的第一个节点的命名空间 URI。 |
fn:lang(lang) | 如果当前节点的语言与指定语言的语言匹配,则返回 true。 示例:Lang("en") 对以下情况为 true 示例:Lang("de") 对以下情况为 false |
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) | 返回一个新的序列,该序列由项参数的值构成 - 其中由 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) | 仅返回不同的(不同的)值。 示例:distinct-values((1, 2, 3, 1, 2)) |
fn:insert-before((item,item,...),pos,inserts) | 返回一个新的序列,该序列由项参数的值构成 - 其中 inserts 参数的值已插入 pos 参数指定的 position 中。 示例: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 参数指定的 position 开始的项序列,并继续进行 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() | 返回当前 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 |