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