在函數(shù)庫中的每一個函數(shù)都使用一個函數(shù)原型,該原型給定返回類型,函數(shù)的名稱,以及參數(shù)的類型。如果參數(shù)類型后跟隨一個問號,那么參數(shù)是可選的;否則,參數(shù)則是必須有的。
4.1 節(jié)點集合函數(shù)
number
last()
last
函數(shù)返回一個數(shù)字,該數(shù)字等於從表達式求值上下文中的上下文大小
number
position()
position
函數(shù)返回一個數(shù)字,該數(shù)字等於從表達式求值上下文中的上下文位置
number
count(node-set)
count
函數(shù)返回在參數(shù)node-set中節(jié)點的個數(shù)。
node-set
id(object)
id
函數(shù)id通過元素的唯一的ID選擇他們(參見 5.2.1 唯一 ID)。當id
的參數(shù)是節(jié)點集合類型時,結(jié)果是對在參數(shù)節(jié)點集合里的每一個節(jié)點的字串值應(yīng)用id
的結(jié)果的聯(lián)合。當?shù)?code>id的參數(shù)是任何其它的類型時,參數(shù)被轉(zhuǎn)換成一個字符串,即如調(diào)用了string
函數(shù)一樣;字符串被分割成由空白格分開的單字片序列(空白格是與產(chǎn)生式 S匹配的字符的任何順序);結(jié)果是在上下文節(jié)所在的同一文檔中那些具有唯一id
等於序列中任何一個單字片的元素的節(jié)點集合。
string
local-name(node-set?)
函數(shù) local-name
返回一個節(jié)點的擴展名的局域部分,該節(jié)點為依照文檔順序參數(shù)節(jié)點集合里的第一個節(jié)點。如果參數(shù)節(jié)點集合是空或第一節(jié)點沒有擴展名,則返回一個空字符串。如果參數(shù)被省略,它則缺省為僅有一個上下文節(jié)點成員的節(jié)點集合。
string
namespace-uri(node-set?)
函數(shù) namespace-uri
返回依照文檔順序參數(shù)節(jié)點集合中的第一個節(jié)點的擴展名的命名空間 URI。如果參數(shù)節(jié)點集合是空的,第一節(jié)點沒有擴展名,或擴展名的命名空間 URI 為空,則返回一個空字符串。如果參數(shù)被省略,它則缺省為僅有一個上下文節(jié)點成員的節(jié)點集合。
注意:
除了元素節(jié)點和屬性節(jié)點外函數(shù) namespace-uri
返回的字符串將為空。
string
name(node-set?)
函數(shù) name
返回一個字符串,字符串包含一個QName,它代表依照文檔順序參數(shù)節(jié)點集合中的第一個節(jié)點的擴展名。QName代表擴展名字時,必須注意到命名空間聲明實際上是對被表示的擴展名的節(jié)點的。典型地,在XML資源中將是 QName 出現(xiàn)。如果命名空間聲明實際上是對與有同樣命名空間的多重的前綴相聯(lián)系的節(jié)點,這不必是實際上的情況。然而,實現(xiàn)可以包括有關(guān)節(jié)點的表示的原來前綴的信息;在這樣的情況下,實現(xiàn)能保證返回的字符串總是與在 XML 文檔使用的QName一樣。如果參數(shù)節(jié)點集合是空的或第一節(jié)點沒有擴展名,返回一個空的字符串。如果它省略了的參數(shù),則缺省為僅有上下文節(jié)點一個成員的節(jié)點集合。
注意:
除了元素節(jié)點和屬性節(jié)點外,由 name
函數(shù)返回的字符串將與 local-name
函數(shù)返回的字符串一樣。
4.2 字符串函數(shù)
string
string(object?)
string
函數(shù)將對象依下列各項轉(zhuǎn)換成字符:
-
節(jié)點集合通過返回在節(jié)點集合中文檔順序下第一個節(jié)點的字串值來轉(zhuǎn)換成字符串。如果節(jié)點是空的則返回空字符串。
-
數(shù)字按以下方式轉(zhuǎn)換成字符
-
NaN 轉(zhuǎn)換成字符串 NaN
-
正零轉(zhuǎn)換成字符串 0
-
負零轉(zhuǎn)換成字符串 0
-
正無窮大轉(zhuǎn)換成字符串 Infinity
-
負無窮大轉(zhuǎn)換成字符串 -Infinity
-
如果數(shù)字是整數(shù),該數(shù)字表示成一個與無小數(shù)點及領(lǐng)頭零的 Number一樣的十進制的形式,如果數(shù)字是負數(shù),則在其前加一個負號(-
)。
-
否則,該數(shù)字表示成一個與包括小數(shù)點及至少在小數(shù)點前面有一數(shù)字并且小數(shù)點后有一數(shù)字的 Number一樣的十進制的形式,如果數(shù)字是負數(shù),則在其前加一個負號(-
);除了在小數(shù)點前要求直接要有一個位的零外,不應(yīng)該有領(lǐng)頭的零;在小數(shù)點后除了要求的一位數(shù)外,應(yīng)有不多不少的位來區(qū)分該數(shù)與所有其它的 IEEE 754 數(shù)值。
-
布爾的假值轉(zhuǎn)換成字符串 false
。布爾的真值轉(zhuǎn)換成字符串 true
。
-
不是四種基本類型的對象依照所屬類型的方式轉(zhuǎn)換成字符串。
如果參數(shù)省略,則缺省為僅有一個上下文節(jié)點為成員的節(jié)點集合。
注意:
string
函數(shù)不是要用來將數(shù)字轉(zhuǎn)換成字符串呈現(xiàn)給用戶的。 format-number
函數(shù)和[XSLT] 中的 xsl:number
元素提供了這樣的功能。
string
concat(string, string, string*)
concat
函數(shù)返回它的參數(shù)的聯(lián)結(jié)。
boolean
starts-with(string, string)
如果第一個字符串參數(shù)以第二個字符串參數(shù)起頭,starts-with
函數(shù)返回真,否則,返回假。
boolean
contains(string, string)
如果第一個字符串參數(shù)包含第二個字符串參數(shù),contains
函數(shù)返回真,否則,返回假。
string
substring-before(string, string)
substring-before
函數(shù)返回第一個字符串參數(shù)在第二個參數(shù)首次出現(xiàn)之前的子字符串,或者,如果第一個字符串參數(shù)不包含第二個字符串參數(shù)則返回空字符串。例如,substring-before("1999/04/01","/")
返回 1999
。
string
substring-after(string, string)
substring-after
函數(shù)返回第一個字符串參數(shù)在第二個參數(shù)首次出現(xiàn)之后的子字符串,或者,如果第一個字符串參數(shù)不包含第二個字符串參數(shù)則返回空字符串。例如, substring-after("1999/04/01","/")
返回 04/01
,而 substring-after("1999/04/01","19")
返回 99/04/01
。
string
substring( string , number , number? )
substring
函數(shù)返回第一個字符串參數(shù)從第二個參數(shù)所指定的位置開始,以第三個參數(shù)為長度的子字符串。例如, substring("12345",2,3)
返回 "234"
。如果沒有第三個參數(shù),則返回從第二個參數(shù)所指定的位置開始直到結(jié)束。例如, substring("12345",2)
返回"2345"
。
更確切地說,每一個字符串里的字符(參看3.6 字符串)是被看作有一個數(shù)字位置:第一個字符是 1 ,第二個字符是 2 ,依此類推。
注意:
這與 Java 和 ECMAScript 不同,在 Java 和 ECMAScript 中 String.substring
方法將第一個字符的位置當成 0 。
該返回的子字符串包含那些字符位置大於或等於第二參數(shù)的取整值,如果指定了第三個參數(shù),則小於第二和第三個參數(shù)的取整值之和;以上的比較和加法遵循 IEEE 754 的規(guī)則;取整操作仿佛是調(diào)用了round
函數(shù)。以下的例子說明了各種不常見的案例:
-
substring("12345", 1.5, 2.6)
返回 "234"
-
substring("12345", 0, 3)
返回 "12"
-
substring("12345", 0 div 0, 3)
返回 ""
-
substring("12345", 1, 0 div 0)
返回 ""
-
substring("12345", -42, 1 div 0)
返回 "12345"
-
substring("12345", -1 div 0, 1 div 0)
返回 ""
number
string-length( string? )
string-length
返回字符串(參看 3.6 字符串)中字符的個數(shù)。如果參數(shù)省略,則缺省為一個上下文節(jié)點再轉(zhuǎn)換成字符串,也就是上下文節(jié)點的 字串值。
string
normalize-space(string?)
normalize-space
函數(shù)返回空白符規(guī)范化 后的參數(shù)字符串,該規(guī)范化是清除領(lǐng)頭及結(jié)尾的空白字以及用一個空白符替換連續(xù)的空白符。空白符字符與 XML 中的產(chǎn)生式 S 所允許的是一樣的。如果參數(shù)省略,則缺省為一個上下文節(jié)點再轉(zhuǎn)換成字符串,也就是上下文節(jié)點的 字串值。
string
translate(string, string, string)
translate
函數(shù)返回第一個參數(shù)的字符串,其中有在第二個參數(shù)中出現(xiàn)的字符都被在第三個參數(shù)中相對應(yīng)位置的字符所替換。例如,translate("bar","abc","ABC")
返回字符串 BAr
。如果,第二個參數(shù)里的字符在第三個參數(shù)的相對應(yīng)位置沒有字符(因為第二個參數(shù)里的字符串比第三個參數(shù)的字符串長),那么,第一個參數(shù)里的那個字符將被移去。例如,translate("--aaa--","abc-","ABC")
返回 "AAA"
。如果在第二個參數(shù)里的字符出現(xiàn)超過一次,那么,第一次的出現(xiàn)決定替換的字符。如果第三個參數(shù)里的字符串比第二個參數(shù)的字符串長, 那么,多余的字符將被忽略。
注意:
translate
函數(shù)不是一個對所有語言大小寫轉(zhuǎn)換的完整解決方案。XPath 的將來的版本可能會為大小寫轉(zhuǎn)換提供額外的函數(shù)。
4.4 數(shù)字函數(shù)
number
number(object?)
number
函數(shù)參數(shù)依下列各項轉(zhuǎn)換成數(shù)字:
-
可選的空白符跟隨可選的減號再跟隨 Number 再跟隨空白符的字符串轉(zhuǎn)換成 IEEE 754 最接近的 (根據(jù) IEEE 754 就近取整規(guī)則) 由字符串表示的數(shù)學值的數(shù)字;其它任何的字符串轉(zhuǎn)換成 NaN
-
布爾真轉(zhuǎn)換成 1 ;布爾假轉(zhuǎn)換成 0
-
節(jié)點集合首先轉(zhuǎn)換成字符串好像調(diào)用了 string
函數(shù),然后再按字符串參數(shù)的方式轉(zhuǎn)換
-
不是四種基本類型的對象依照所屬類型的方式轉(zhuǎn)換成數(shù)字。
如果參數(shù)省略,則缺省為僅有一個上下文節(jié)點為成員的節(jié)點集合。
注意:
除非元素是在語言自然格式(典型地被改變成語言特定的格式呈現(xiàn)給用戶)下代表數(shù)字數(shù)據(jù)的類型,number
函數(shù)不應(yīng)用于 XML 文檔元素中的數(shù)字轉(zhuǎn)換。另外,除非語言自然格式與 XPath 句法的 Number,number
函數(shù)不能使用。
number
sum(node-set)
對於在參數(shù)節(jié)點集合的每個節(jié)點,sum
函數(shù)返回節(jié)點字串值轉(zhuǎn)換成數(shù)字后的和。
number
floor(number)
floor
函數(shù)返回不大於參數(shù)的整數(shù)的最大數(shù) (最接近于正無窮大) 。
number
ceiling(number)
ceiling
函數(shù)返回不小於參數(shù)的整數(shù)的最小數(shù) (最接近于負無窮大) 。
number
round(number)
round
函數(shù)返回最接近于參數(shù)的整數(shù)。如果有兩個這樣的數(shù)字,那么,返回最接近于正無窮大的那個。如果參數(shù)是 NaN,那么返回 NaN。如果參數(shù)是正無窮大,那么返回正無窮大。如果參數(shù)是負無窮大,那么返回負無窮大。如果參數(shù)是正零,那么返回正零。如果參數(shù)是負零,那么返回負零。如果參數(shù)小於零,但大於或等於 -0.5 ,那么返回負零。
注意:
對於最后兩種情況,調(diào)用round
函數(shù)與加上 0.5 后并調(diào)用 floor
的結(jié)果不同。