跳轉到內容

XPath/基本語法

來自華夏公益教科書,自由的教科書

XPath 基本語法

[編輯 | 編輯原始碼]

以正斜槓“/”開頭的表示式稱為絕對錶達式。它們從文件的根節點開始。所有其他表示式都是相對於 XML 文件中的當前位置的。

表示式是透過建立形式為 的步驟表示式列表來建立的

  step[predicate]/step[predicate]/step[predicate]

可以將謂詞視為類似於 SQL 中 WHERE 子句的過濾器或條件表示式。

示例 XML 檔案

[編輯 | 編輯原始碼]

許多示例使用諸如以下的“books”示例

http://raw.github.com/dmccreary/learn-xquery/master/data/books.xml

通常,books 檔案具有以下結構

<books>
  <book>
    <title>XQuery</title>
    <format>wikibook</format>
  </book>
</books>

基本 XPath 表示式

[編輯 | 編輯原始碼]

根文件節點

 /

請注意,正斜槓返回文件根節點,而不是完整的 books 元素。

包含所有書籍的根節點

 /books

所有 book 元素

 /books/book
 //book

第一個版本是使用絕對路徑。第二個使用相對路徑 - 檔案任何級別的 book 元素。

請注意,第一個表示式在未索引的 XML 中速度更快,但在索引的本機 XML 資料庫中,第二個表示式速度更快。

書籍數量的計數

  count(//book)

所有書籍標題

  //book/title

集合中的第二本書

  //book[2]

第二本書的標題

  //book[2]/title

第二本書的第三位作者

  //book[2]/author[3]

所有格式為“wikibook”的書籍

  //book[format='wikibook']

獲取所有出版商的列表

  //publisher

獲取出版商的唯一列表(刪除重複項)

  distinct-values(//publisher)

價格至少超過 30 美元的書籍

  //book[list-price > 30]

XPath 縮寫

[編輯 | 編輯原始碼]

. 代表當前節點

.. 代表最近的父節點

@ 代表屬性分隔符

$ 代表變數分隔符

[n] 代表當前節點的第 n 個子節點

ancestor::div 代表父 div 節點集

normalize-space(firstname)="Paul" 與 Paul 匹配,無論空格分隔符如何

boolean(string($myvar) ) 檢查空字串

/ 代表根節點的絕對路徑

@* 代表當前節點的所有屬性

- 使用屬性、節點名稱和文字值的聯合返回所有值

@*|node()|text()


- 使用 preceding-sibling 和 following-sibling 軸的聯合返回節點的所有兄弟節點

preceding-sibling::node() | following-sibling::node()


- 返回特定型別的相鄰兄弟節點

//div/following-sibling::h3


- 檢查當前節點的字串值

[. = "Matthew Bob"]


- 可以使用 count() 函式檢查節點標識,以檢視兩個相同長度的節點集的交集是否等於任一節點集的長度(或者在單個節點集的情況下,它是否等於 1)。例如,以下查詢在這種情況下返回 TRUE,因為兩個節點都是相同的

count(/bk:books | /bk:books/bk:book[1]/parent::*) = 1

華夏公益教科書