XSLT/XPath 函数

创建于 2024-12-03 / 33
字体: [默认] [大] [更大]

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')
结果:100

fn:abs(num) 返回参数的绝对值

示例: abs(3.14)
结果: 3.14

示例: abs(-3.14)
结果: 3.14

fn:ceiling(num) 返回大于 number 参数的最小整数

示例: ceiling(3.14)
结果: 4

fn:floor(num) 返回不大于 number 参数的最大整数

示例: floor(3.14)
结果: 3

fn:round(num) 将数字参数四舍五入为最接近的整数

示例: round(3.14)
结果: 3

fn:round-half-to-even() 示例: round-half-to-even(0.5)
结果: 0

示例: round-half-to-even(1.5)
结果: 2

示例: round-half-to-even(2.5)
结果: 2

字符串函数

名称 描述
fn:string(arg) 返回参数的字符串值。 参数可以是数字、布尔值或节点集

示例: string(314)
结果: "314"

fn:codepoints-to-string((int,int,...)) 从 Unicode 标准代码点序列创建字符串

示例: codepoints-to-string((84, 104, 233, 114, 232, 115, 101))
结果: 'Thérèse'

fn:string-to-codepoints(string) 从字符串返回 Unicode 标准代码点的序列

示例: string-to-codepoints("Thérèse")
结果: (84, 104, 233, 114, 232, 115, 101)

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')
结果: 0

fn:concat(string,string,...) 返回字符串的连接

示例: concat('XPath ','is ','FUN!')
结果: 'XPath is FUN!'

fn:string-join((string,string,...),sep) 返回通过连接字符串参数并使用 sep 参数作为分隔符创建的字符串

示例: string-join(('We', 'are', 'having', 'fun!'), ' ')
结果: ' We are having fun! '

示例: string-join(('We', 'are', 'having', 'fun!'))
结果: 'Wearehavingfun!'

示例:string-join((), 'sep')
结果: ''

fn:substring(string,start,len)
fn:substring(string,start)
返回从起始位置到指定长度的子字符串。 第一个字符的索引为 1。如果省略长度,则返回从开始位置到结束的子字符串

示例: substring('Beatles',1,4)
结果: 'Beat'

示例: substring('Beatles',2)
结果: 'eatles'

fn:string-length(string)
fn:string-length()
返回指定字符串的长度。 如果没有字符串参数,则返回当前节点的字符串值的长度

示例: string-length('Beatles')
结果: 7

fn:normalize-space(string)
fn:normalize-space()
从指定字符串中删除前导和尾随空格,并将所有内部空格序列替换为 1 并返回结果。 如果没有字符串参数,则在当前节点上执行相同的操作

示例: normalize-space(' The   XML ')
结果: 'The XML'

fn:normalize-unicode()  
fn:upper-case(string) 将字符串参数转换为大写

示例: upper-case('The XML')
结果: 'THE XML'

fn:lower-case(string) 将字符串参数转换为小写

示例: lower-case('The XML')
结果: 'the xml'

fn:translate(string1,string2,string3) 通过将 string2 中的字符替换为 string3 中的字符来转换 string1

示例: translate('12:30','30','45')
结果: '12:45'

示例: translate('12:30','03','54')
结果: '12:45'

示例: translate('12:30','0123','abcd')
结果: 'bc:da'

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())
结果: "http://example.com/test#car"

示例: escape-uri ("http://example.com/~bébé", false())
结果: "http://example.com/~b%C3%A9b%C3%A9"

fn:contains(string1,string2) 如果 string1 包含 string2,则返回 true,否则返回 false

示例: contains('XML','XM')
结果: true

fn:starts-with(string1,string2) 如果 string1 以 string2 开头,则返回 true,否则返回 false

示例: starts-with('XML','X')
结果: true

fn:ends-with(string1,string2) 如果 string1 以 string2 结尾,则返回 true,否则返回 false

示例: ends-with('XML','X')
结果: false

fn:substring-before(string1,string2) 在 string2 出现之前返回 string1 的开始

示例: substring-before('12/10','/')
结果: '12'

fn:substring-after(string1,string2) 返回 string1 中出现 string2 后的剩余部分

示例: substring-after('12/10','/')
结果: '10'

fn:matches(string,pattern) 如果字符串参数与模式匹配,则返回 true,否则返回 false

示例: matches("Merano", "ran")
结果: true

fn:replace(string,pattern,replace) 返回通过用替换参数替换给定模式创建的字符串

示例: replace("Bella Italia", "l", "*")
结果: 'Be**a Ita*ia'

示例: replace("Bella Italia", "l", "")
结果: 'Bea Itaia'

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())
结果: false

fn:true() 返回布尔值 true

示例: true()
结果: true

fn:false() 返回布尔值 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"))
结果: 2005

fn:month-from-dateTime(datetime) 返回一个整数,该整数表示参数的本地化值中的月份分量

示例: month-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
结果: 01

fn:day-from-dateTime(datetime) 返回一个整数,该整数表示参数的本地化值中的天分量

示例: day-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
结果: 10

fn:hours-from-dateTime(datetime) 返回一个整数,表示参数的本地化值中的小时分量

示例: hours-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
结果: 12

fn:minutes-from-dateTime(datetime) 返回一个整数,表示参数的本地化值中的分钟分量

示例: minutes-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))
结果: 30

fn:seconds-from-dateTime(datetime) 返回一个小数,表示参数的本地化值中的秒分量

示例: seconds-from-dateTime(xs:dateTime("2005-01-10T12:30:00-04:10"))
结果: 0

fn:timezone-from-dateTime(datetime) 返回参数的时区分量(如果有)
fn:year-from-date(date) 返回一个整数,表示参数的本地化值中的年份

示例: year-from-date(xs:date("2005-04-23"))
结果: 2005

fn:month-from-date(date) 返回一个整数,表示参数的本地化值中的月份

示例: month-from-date(xs:date("2005-04-23"))
结果: 4

fn:day-from-date(date) 返回一个整数,表示参数的本地化值中的日期

示例: day-from-date(xs:date("2005-04-23"))
结果: 23

fn:timezone-from-date(date) 返回参数的时区分量(如果有)
fn:hours-from-time(time) 返回一个整数,表示参数的本地化值中的小时分量

示例: hours-from-time(xs:time("10:22:00"))
结果: 10

fn:minutes-from-time(time) 返回一个整数,表示参数的本地化值中的分钟分量

示例: minutes-from-time(xs:time("10:22:00"))
结果: 22

fn:seconds-from-time(time) 返回一个整数,表示参数的本地化值中的秒分量

示例: seconds-from-time(xs:time("10:22:00"))
结果: 0

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
<p xml:lang="en">...</p>

示例: Lang("de") is false for
<p xml:lang="en">...</p>

fn:root()
fn:root(node)
返回当前节点或指定节点所属的树的根。 这通常是一个文档节点

序列上的函数

序列的一般函数

名称 描述
fn:index-of((item,item,...),searchitem) 返回等于 searchitem 参数的项目序列中的位置

示例: index-of ((15, 40, 25, 40, 10), 40)
结果: (2, 4)

示例: index-of (("a", "dog", "and", "a", "duck"), "a")
Result (1, 4)

示例: index-of ((15, 40, 25, 40, 10), 18)
结果: ()

fn:remove((item,item,...),position) 返回从项目参数的值构造的新序列 - 删除了位置参数指定的项目

示例: remove(("ab", "cd", "ef"), 0)
结果: ("ab", "cd", "ef")

示例: remove(("ab", "cd", "ef"), 1)
结果: ("cd", "ef")

示例: remove(("ab", "cd", "ef"), 4)
结果: ("ab", "cd", "ef")

fn:empty(item,item,...) 如果参数的值为空序列,则返回 true,否则返回 false

示例: empty(remove(("ab", "cd"), 1))
结果: false

fn:exists(item,item,...) 如果参数的值不是空序列,则返回 true,否则返回 false

示例: exists(remove(("ab"), 1))
结果: false

fn:distinct-values((item,item,...),collation) Returns only distinct (different) values

示例: distinct-values((1, 2, 3, 1, 2))
结果: (1, 2, 3)

fn:insert-before((item,item,...),pos,inserts) 返回从 item 参数的值构造的新序列 - inserts 参数的值插入到 pos 参数指定的位置

示例: insert-before(("ab", "cd"), 0, "gh")
结果: ("gh", "ab", "cd")

示例: insert-before(("ab", "cd"), 1, "gh")
结果: ("gh", "ab", "cd")

示例: insert-before(("ab", "cd"), 2, "gh")
结果: ("ab", "gh", "cd")

示例: insert-before(("ab", "cd"), 5, "gh")
结果: ("ab", "cd", "gh")

fn:reverse((item,item,...)) 返回指定项目的相反顺序

示例: reverse(("ab", "cd", "ef"))
结果: ("ef", "cd", "ab")

示例: reverse(("ab"))
结果: ("ab")

fn:subsequence((item,item,...),start,len) 从 start 参数指定的位置返回一系列项目,并继续 len 参数指定的项目数。 第一项位于位置 1

示例: subsequence(($item1, $item2, $item3,...), 3)
结果: ($item3, ...)

示例: subsequence(($item1, $item2, $item3, ...), 2, 2)
结果: ($item2, $item3)

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))
结果: 2

fn:max((arg,arg,...)) 返回大于其他参数的参数

示例: max((1,2,3))
结果: 3

示例: max(('a', 'k'))
结果: 'k'

fn:min((arg,arg,...)) 返回小于其他参数的参数

示例: min((1,2,3))
结果: 1

示例: min(('a', 'k'))
结果: 'a'

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]
结果: Selects the first three book elements

fn:last() 返回已处理节点列表中的项目数

示例: //book[last()]
结果: Selects the last book element

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


0 人点赞过