XPath入門學習
簡述XPath,XSLT,XLink與XPointer
XSLT、XLink 和 XPointer 都是 W3C 標準。XSLT 和 XPath,以及 XSL Formatting Object (XSL-FO) 構成了 W3C eXtensible Stylesheet Language (XSL) 系列規范。
XSLT、XLink 和 XPointer 都是 W
表示:XSLT 廣泛使用 XPath 進行匹配――也就是,測試節點是否匹配指定模式。XSLT 指定了 XPath 使用的上下文。如果想使用 XSLT,就應該了解 XPath。在 關于本教程中使用的例子 中,您看到了 AuctionItemSummary-Base.xsl 樣式表包含了 XPath 表達式。XSLT 使用這些 XPath 表達式,在源文檔中查找匹配條件的元素,也使用它們來顯示結果文檔中的信息。XSLT 使用 XPath 函數來執行算術和字符串操縱操作。
鏈接:XLink 在 XML 中提供了 HTML 超鏈接概念的一般化。XLink 為要插入 XML 文檔的元素提供了某種語法,以便把資源鏈接在一起,及描述它們的關系。這些鏈接可以是單向的,比如 HTML 的超鏈接,或者更加復雜的。XLink 使用 XPointer 來查找資源。
指向:XPointer 是 XPath 的擴展,提供了到 XML 文檔及其內部的尋址。XPointer 一般化了 XPath 節點的概念,使用了 XPointer 位置、點和范圍的概念。XPointer 也指定了在 XPath 計算過程中使用的上下文,并提供了在 XPath 中不可用的其他函數。
一句話小結:
XML:其他技術的基礎(數據)。
XML Schema:數據格式規則。
XSLT:數據表示/匹配。
XLink:鏈接。
XPointer and XPath:尋址。
XML語法
一.位置路徑
1.路徑
位置路徑是 XPath 中最有用也是應用最廣泛的特性。位置路徑是 XPath 表達式的特化(參見 表達式)。位置路徑標識了和上下文有關的一組 XPath 節點。XPath 定義了兩種語法:簡化語法和非簡化語法。
位置路徑有相對和絕對兩種類型。
相對位置路徑由使用 / 分隔的定位步序列組成。比如:
list/item[currentPrice<20.0]
絕對位置路徑由 / 和后面可選的相對位置路徑組成,其中 / 表示根節點。
/list/item[currentPrice<20.0]
XPath 表達式 /list 就確定了一個單獨的節點――list 根元素。
The XPath 表達式 /list/item 確定了所有 item 元素。
XPath 表達式可以引用屬性及 XML 文檔中的元素。當引用屬性時,使用 @ 字符。例如,下面的 XPath 表達式確定了 currentPrice 元素,其 currency 屬性包含值 EUR:
/list/item/currentPrice[@currency="EUR"]
@ 用于引用屬性。比如,位置路徑 @currency 標識了 currency 屬性。list/item[@private] 標識帶有 private 屬性的 item 元素,意即 AuctionItemList.xml 中的所有 item 元素。
* 用于引用上下文結點的所有子元素。@* 用于引用上下文結點的所有屬性。
[] 也可用于引用有序序列中的特定元素。比如,list/item[2] 代表第二個 item 元素。實際上 [] 是一個謂詞(參見謂詞)。
// 用于引用上下文節點的所有孩子。比如,//item 表示所有的 item 元素,而 //list/item 引用以 list 為父元素的所有 item 元素(在該例中即所有的 item 元素)。
. 用于引用上下文節點自身。比如,. 選擇上下文節點,而 .//item 代表作為上下文節點孩子的所有 item 元素。
.. 用于引用上下文節點的父節點。比如,在第一個bidIncrement 元素的上下文中, ../item 就表示第一個 item 元素。
2.謂詞
謂詞在位置路徑中用于篩選當前節點集。謂詞包含一個 boolean 表達式(或者很容易轉化成 boolean 值的表達式)。用這個布爾表達式測試當前節點集的每個成員,如果表達式成立則保留該成員否則丟棄。謂詞放在方括號[]中。比如下面的位置路徑:
list/item/currentPrice[@currency="EUR"]
在計算過程中,AuctionItemList.xml 中所有的 currentPrice 元素都放在選擇的節點集中。然后計算謂詞 @currency="EUR",貨幣中不包含值 EUR 的 currentPrice 元素被拋棄。
謂詞也可以使用關系運算符 >、<、>=、<= 和 !=。
二.表達式
1.布爾表達式
XML 文檔中包含 XPath 表達式時,必須遵循 XML 1.0 的結構良好性規則,任何 < 或 <= 字符必須分別用 < 和 <= 表示。比如,XPath 表達式 bidIncrement < 5 在 XPointer 中是合法的,但是在 XSLT 文檔中必須寫成 bidIncrement < 5。
2.數字
XPath 數字是 64 位雙精度浮點數。XPath 數字包括“非數字” NaN 值、正無窮和負無窮、正零和負零。
XPath 提供的數值運算符有:+(加)、-(減)、*(乘)、div(除)和 mod(整除求余)。
提示:減法(-)運算符的前面必須有空格,因為 XML 允許字符串中包含“-”字符。
下面是 XPath 數字表達式的一些例子:
7 + 3 返回 10
7 - 3 返回 4
7 * 3 返回 21
7 div 3 返回 2.3333333333333335
7 mod 3 返回 1
3.字符串
XPath 中的字符串使用引號(' 或 ")包圍起來。如果 XML 文檔中的 XPath 字符串包含引號,可以選擇:
分別使用 ' 或 " 引起來。比如,description = 'New 256m "USB" MP3 player'
三.函數庫
XPath 定義了一組函數,稱為核心函數庫。每個函數從三個方面來定義:
(1)函數名
(2)返回類型(必須的,不能使用 void)
(3)參數類型(可以沒有參數或者帶有多個參數,參數可以是必需的也可以是可選的)
函數被分成四類,以下分別介紹:
1.節點集函數
節點集函數提供關于一組節點(一個或多個節點)的信息。常用的節點集函數有:
last()――返回一個稱為上下文大小的數字,即給定上下文中的節點數,不同于最后一個節點。
position()――返回一個稱為上下文位置的數字,集當前節點在給上下文節點集(列表)中的位置。比如,可以用表達式 position()=last() 測試處理的是否是集合中的最后一個節點。
count(node-set)――返回實參節點集中的節點數。比如,在 AuctionItemList.xml 文檔的上下文中,count(//item) 返回 item 元素的個數,即 7。
id(object)――返回一個節點集,根據在 DTD 中聲明為 ID 類型的唯一標識符選擇元素。因為在 AuctionItemList.xml 中沒有使用 DTD,這個例子中得到的節點集總是空集。Id("ItemId0001") 返回一個空節點集。
XPath 還定義了和節點名及名稱空間有關的其他三個函數:
local-name()
namespace-uri()
name()
2.字符串函數
通過字符串函數您可以操縱字符串。常用的字符串函數有:
string()――把參數對象或者上下文結點轉化成字符串。合法的參數包括節點集、數字、布爾值或者其他任何類型――但是對于最后一種情況轉換的結果不可預料。建議使用 XSLT 函數 format-number 把數字轉化成字符串,或者使用 XSLT 元素 xsl:number 提供給用戶。
concat()――以兩個或更多字符串作為參數并返回這些字符串的連接。比如,concat("Original ","recording ","Blue Train LP record") 返回 "Original recording Blue Train LP record"。
starts-with()――如果第一個字符串參數以第二個字符串參數開始則返回 true,否則返回 false。比如,starts-with("Miles Smiles album, CD", "Miles") 返回 true。
contains()――如果第一個字符串參數包含第二個字符串參數則返回 true,否則返回 false。比如,contains("Miles Smiles album, CD", "album") 返回 true。
其他的 XPath 字符串函數包括:substring()、substring-before()、substring-after()、string-length()、normalize-space() 和 translate()。
3.布爾函數
布爾函數用于把一個對象或字符串轉化成 true 或者 false,或者直接獲得真或假的值。布爾函數有:
boolean()――根據以下規則返回作為參數傳遞的對象轉換成布爾值的結果:不同于 0 或者 NaN 的數字為 true;非空的節點集或者字符串為 true。其他類型的對象已不可預料的方式轉換。
not()――如果作為參數傳遞的布爾值為 false 返回 true,否則返回 false。
true() 和 false()――分別返回 true 或 false。這些函數很有用,因為在 XPath 中 true 和 false 被看作是普通的字符串而不是真和假的值。
lang()――如果上下文節點的語言和字符串參數中指定的語言相同,或者是它的一種子語言返回 true,否則返回 false。
4.數字函數
數字函數是 XPath 的數值函數,都返回數字。其中包括:
number()――把可選的對象參數(如果沒有指定參數則使用上下文節點)轉化成數字,轉換的規則如下:
布爾值 true 轉換成1,false 轉換成 0。
字符串轉換成合理的數字。
節點集首先轉換成字符串,然后把這個字符串轉換成數字。
其他類型對象以不可預料的方式轉換。比如,number("250") 返回 250,而 number("miles1965") 返回 NaN。
sum()――對節點集參數中的所有節點應用 number() 函數后返回它們的和。
floor()――返回不大于數字參數的最大整數數字。比如,floor(2.75) 返回 2。
ceiling()――返回不小于數字參數的最小整數數字。比如,ceiling(2.75) 返回 3。
round()――返回和數字參數最接近的整數數字。比如,round(2.75) 返回 3。
XML Path Language (XPath)
Version 1.0
W3C Recommendation 16 November 1999
- This version:
- http://www.w3.org/TR/1999/REC-xpath-19991116
(available in XML or HTML)
- Latest version:
- http://www.w3.org/TR/xpath
- Previous versions:
- http://www.w3.org/TR/1999/PR-xpath-19991008
http://www.w3.org/1999/08/WD-xpath-19990813
http://www.w3.org/1999/07/WD-xpath-19990709
http://www.w3.org/TR/1999/WD-xslt-19990421
- Editors:
- James Clark <jjc@jclark.com>
Steve DeRose (Inso Corp. and Brown University) <Steven_DeRose@Brown.edu>
Copyright © 1999 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
Version 1.0
(available in XML or HTML)
http://www.w3.org/1999/08/WD-xpath-19990813
http://www.w3.org/1999/07/WD-xpath-19990709
http://www.w3.org/TR/1999/WD-xslt-19990421
Steve DeRose (Inso Corp. and Brown University) <Steven_DeRose@Brown.edu>
posted on 2007-11-19 22:24 sun 閱讀(1193) 評論(0) 編輯 收藏 所屬分類: XML