最新的Web開發教程
 

XPath語法


XPath使用路徑表達式在XML文檔中選擇節點或節點集。 該節點通過以下的路徑或步驟選擇。


XML實例文檔

我們將使用下面的XML文檔在下面的例子。

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>

<book>
  <title lang="en">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="en">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

選擇節點

XPath使用路徑表達式在XML文檔中選擇節點。 該節點通過以下的路徑或步驟選擇。 最有用的路徑表達式如下:

表達 描述
nodename 選擇所有節點名稱為“ nodename
/ 從根節點選擇
// 從選擇符合選擇當前節點的文檔中的節點,無論他們在哪裡
. 選擇當前節點
.. 選擇當前節點的父節點
@ 選擇屬性

在下面的表格中我們列出了一些路徑表達式以及表達式的結果:

路徑表達式 結果
書店 選擇所有節點名為"bookstore"
/書店 選擇的根元素書店

Note:如果路徑以斜線開始( / )它一定是到該元素的絕對路徑!

書店/書 選擇所有book元素是書店的兒童
//書 選擇所有book元素,無論他們在哪裡文檔中
書店//書 選擇所有book元素是後代的書店元素,也不管他們在哪裡書店元素
// @郎 選擇被命名為郎所有屬性

謂詞

謂詞用於查找特定的節點或包含特定值的節點。

謂語被嵌入在中括號。

在下表中,我們列出了一些謂詞的路徑表達式以及表達式的結果:

路徑表達式 結果
/書店/書[1] 選擇第一個book元素是書店元素的孩子。

Note:在IE 5,6,7,8,9第一節點是[0],但根據W3C,它是[1]。 為了解決IE這個問題,設置SelectionLanguage與XPath:

In JavaScript: xmlsetProperty("SelectionLanguage","XPath") ;
/書店/書[ last() ] 選擇最後一個book元素是書店元素的子
/書店/書[ last() -1] 選擇倒數第二個book元素是書店元素的子
/書店/書[ position() <3] 選擇前兩個book元素是書店元素的子
//標題[@lang] 選擇具有名為郎屬性的所有title元素
//標題[@郎='EN'] 選擇具有與值的“lang”屬性的所有title元素"en"
/bookstore/book[price>35.00] 選擇具有價格元素與值bookstore元素的所有book元素大於35.00
/bookstore/book[price>35.00]/title 選擇具有價格元素與值bookstore元素的book元素的所有title元素大於35.00

選擇未知節點

XPath的通配符可以用來選擇未知的XML節點。

通配符 描述
* 匹配任何元素節點
@* 匹配任何屬性節點
node() 匹配任何類型的節點

在下面的表格中我們列出了一些路徑表達式以及表達式的結果:

路徑表達式 結果
/書店/* 選擇所有bookstore元素的子元素節點
// * 選擇文檔中的所有元素
//標題[@*] 選擇其中有什麼樣的至少一個屬性的所有title元素

選取多個路徑

通過使用| 在XPath表達式可以選擇多個路徑。

在下面的表格中我們列出了一些路徑表達式以及表達式的結果:

路徑表達式 結果
//書/標題| //書/價格 選擇所有book元素的所有title和price元素
//標題| //價錢 選擇文檔中的所有title和price元素
/書店/書/標題| //價錢 選擇bookstore元素的book元素和文檔中的所有title元素的所有要素價格