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 |