曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
討論過
boolean not(boolean) 如果命題是錯誤的,返回t r u e,否則,返回f a l s e
boolean true( ) 返回t r u e
boolean false( ) 返回f a l s e
boolean lang(string) 如果上下文節點的語言(可以通過其x m l : l a n g屬性得到)和
指定的語言相同,返回t r u e。如果語言不同或者該屬性沒有出
現在該節點中,返回f a l s e
(5) 數值函數
這些函數基于參數返回數值(參見表8 - 6)。
第8章鏈接和查詢使用273 下載
表8 - 6
函數(返回類型,名和參數) 說明
number number(object?) 將字符串轉換成與它們等價的數字(根據I E E E 7 5 4“截取到
最相近的值”規則)或者轉換成N a N,布爾值1(t r u e)或0
(f a l s e),使用節點集合的第一個節點(按照文檔順序)轉成等
價的數值(和字符串中相同的方法),或者其他的對象基于它
們的類型轉為數值
number sum(node-set) 返回由節點集合中節點的字符串-值表示的數值總和
number floor(number) 返回不大于命題的最大數值(接近于正無窮大)且是整數
number ceiling(number) 返回不小于命題的最小數值(接近于負無窮大)且是整數
number round(number) 返回和命題值最為接近的一個整數,如果兩個整數符合這
個要求,則返回接近于正無窮大的值
我們稍后將看一些例子,這樣會使命題的使用更為清楚。
4. 把它放在一起
一個位置集合規范采用下面的形式:
程序清單8 - 4 4
這樣為了選擇上下文元素的前三個< B o o k >子元素,我們采用:
程序清單8 - 4 5
注意如果這個表達式嵌入在一個標簽(例如一個X L i n k指向一個X P o i n t e r)中,則避免使用
字符<和& :
程序清單8 - 4 6
一個X P o i n t e r程序段可以由一列被前向斜杠分割的位置集合定義。它由一些表達式開始,這
些表達式建立上下文節點—或者僅一個前向斜杠,表示上下文節點從文檔元素開始,或者一
個縮寫絕對位置(在我們討論縮寫時,將會提到),一個I D定位可以用來建立上下文節點。
這樣,為了瀏覽我們的例子中第一個< B o o k >元素中< R e c S u b j C a t e g o r i e s >元素內第二個
< C a t e g o r y >元素,我們使用如下的定位:
程序清單8 - 4 7
喲,太容易了。讓我們看一些縮寫,它們可以用來縮短程序段標識符表達式。
274使用XML 高級編程
下載
5. 縮寫
有些簡單的方法用于指定X P a t h常使用的結構,這樣你可以在定義X P o i n t e r程序段標識符時
利用它。
如果沒有軸被指定,則假設一個子軸。下面兩個程序段選擇文檔元素的第一個< B o o k >子元
素:
程序清單8 - 4 8
屬性軸同樣可以縮寫—我們可以用@來代替a t t r i b u t e : :,由此,這兩個程序段均選擇第一
個< B o o k >元素的c o l o r屬性:
程序清單8 - 4 9
一個通常的結構是/ d e s c e n d a n t - o r-self::node( )/ 它選擇上下文節點的后代節點用于更深層次
的處理。不過,這種結構可以縮寫成為/ /。下面兩個例子選擇文檔中每個< Ti t l e >節點:
程序清單8 - 5 0
“.”縮寫和self::node( )相同,下面兩個定位指定了上下文節點的< Ti t l e >后代:
程序清單8 - 5 1
同樣,“. .”縮寫和parent::node( ) 相同。這樣,下面兩個定位指定了上下文父節點的所有
< Ti t l e >子節點:
程序清單8 - 5 2
最后,在一個謂詞中,短語position( )=X可以使用X代替。下面兩個定位指定了上下文節點
的第二個< Ti t l e >子節點:
程序清單8 - 5 3
如果我們將縮寫應用于我們上面的例子,將是:
第8章鏈接和查詢使用275 下載
程序清單8 - 5 4
我們知道可以把它表示成:
程序清單8 - 5 5
X P a t h提供了一種靈活的機制,用于將X M L文檔的獨立部分表示成所喜歡的間隔尺寸,甚至
減至文本元素的獨立字符。X P o i n t e r作為該技術的杠桿允許X M L文檔作為U R I定位的部分被指向。
并且,X P o i n t e r在兩個重要方面擴展了X P a t h的功能。
8.4.2 XPointer對XPath的擴展
XPo i n t e r對X P a t h進行一些擴展,使之允許一些附加的功能。它引入了點和范圍的概念作為
文檔內對位置的描述(除X P a t h內節點結構之外),并提供了一些函數用來處理這些新的位置索
引。
1. 點
X P o i n t e r定義一個點位置概念,作為和節點的區別。不過,一個點位置可以是一個節點。它
也可以是字符內容內一個特殊的位置(例如,在< Ti t l e >元素的文本值的第三個字符)。點對于范
圍的定義是有用的,我們下面將會看到這一點。
2. 范圍
X P o i n t e r定義了范圍位置的概念,它被定義成為X M L結構和兩個點間的內容。注意,這樣
會導致沒有格式正規的部分,因為僅有一些元素的部分被包括在范圍之內。例如,這種指定范
圍的能力將會允許一個指針指向目標文檔內一個特殊單詞的所有事件(例如,作為一個搜索引
擎的輸出)。一個范圍可以這樣聲明:
程序清單8 - 5 6
這樣,一個用來選擇始于I D為b o o k 1的元素終于I D為b o o k 3的元素的范圍,包含了落入其間
的按照文檔順序的所有內容,可以這樣指定:
程序清單8 - 5 7
3. 附加函數
X P o i n t e r規范中有一些附加的函數,允許點和范圍位置的生成和處理。讓我們看一下其中三
個最重要的函數:string-range( ),here( )和unique( )。
276使用XML 高級編程
下載
函數string-range( )搜索目標文檔內的文本,并返回所發現的目標字符串事件的范圍位置。
例如,下面這個定位將返回c a t a l o g . x m l文檔內字符串X M L的所有事件:
程序清單8 - 5 8
例如,這個函數可以用于搜索引擎中—每個單詞的事件在X P o i n t e r內將是一個范圍,允許
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(96)