XPath/基本語法
以正斜槓“/”開頭的表示式稱為絕對錶達式。它們從文件的根節點開始。所有其他表示式都是相對於 XML 文件中的當前位置的。
表示式是透過建立形式為 的步驟表示式列表來建立的
step[predicate]/step[predicate]/step[predicate]
可以將謂詞視為類似於 SQL 中 WHERE 子句的過濾器或條件表示式。
許多示例使用諸如以下的“books”示例
http://raw.github.com/dmccreary/learn-xquery/master/data/books.xml
通常,books 檔案具有以下結構
<books>
<book>
<title>XQuery</title>
<format>wikibook</format>
</book>
</books>
根文件節點
/
請注意,正斜槓返回文件根節點,而不是完整的 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]
. 代表當前節點
.. 代表最近的父節點
@ 代表屬性分隔符
$ 代表變數分隔符
[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