XPath (XML Path Language) 是一種用來尋找XML文件中某個節點(node)位置的查詢語言。
XPath使用類似路徑的語法來尋找節點。
XPath一共有七種節點:element, attribute, text, namespace, processing-instruction, comment, document
XML文件是由許多節點組成的樹狀結構,最上層的結點稱作root element
下面是一份XML文件
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
<!-- comment -->
在上面XML文件中的各節點如下
<?xml version="1.0" encoding="UTF-8"?>
: processing-instruction node<bookstore>
: root element node<author>
: element nodelang="en"
: attribute nodeHarry Potter
: text node<!-- comment -->
: comment node
節點間的關係
Parent:element及attribute會有一個父節點(parent),例如<book>
是<title>
,<author>
,<year>
,<price>
的parent。
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
Children:element可能會有零個,一個或多個子結點(children),例如上面<book>
的children為<title>
,<author>
,<year>
,<price>
Siblings:擁有共同parent的節點彼此為sibling,例如<title>
,<author>
,<year>
,<price>
彼此為siblings
Ancestors: 指一個節點的parent還有parent的parent等,例如下面<bookstore>
及<book>
皆為<title>
的ancestors
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
Descendants: 指一個節點的children及children的children,例如上面<bookstore>
的descendants包括<book>
的children,<title>
,<author>
,<year>
,<price>
XPath語法
範例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使用路徑表示來尋找節點,常用的語法如下
表示式 | 說明 |
---|---|
nodename | 選擇所有的<nodename> 的節點 |
/ | 從root node開始選取 |
// | 選取目前節點下所有的節點 |
. | 從目前的節點選取 |
.. | 選取目前節點的parent |
@ | 選取attribute |
範例
表示式 | 說明 |
---|---|
bookstore | 選擇所有的<bookstore> 的節點 |
/bookstore | 選取root element (<bookstore> ) |
bookstore/book | 選取<bookstore> 下所有children為book 的節點 |
//book | 選取所有位置的<book> 節點 |
bookstore//book | 選取bookstore下全部的book 節點。 |
//@lang | 選取所有attribute為lang 的element |
Predicates: Predicates是用來尋找包含指定值的節點。Predicates包在方括弧[]
中。下面是一些使用範例。
Path 表示式 | 說明 |
---|---|
/bookstore/book[1] | 選取<bookstore> 的children中第一個<book> |
/bookstore/book[last()] | 選取<bookstore> 的children中最後一個<book> |
/bookstore/book[last()-1] | 選取<bookstore> 的children中倒數第二個<book> |
/bookstore/book[position()<3] | 選取<bookstore> 的children中前兩個<book> |
//title[@lang] | 選取全部含有lang 屬性的<title> |
//title[@lang='en'] | 選取全部含有lang 屬性且值為"en" 的<title> |
/bookstore/book[price>35.00] | 選取<bookstore> 的children中的<book> ,其下的<price> 值大於35 |
/bookstore/book[price>35.00]/title | 選取<bookstore> 的children中的<book> ,其下的<price> 值大於35的<title> |
XPath可利用萬用字元(wildcards)來選擇不確定的節點。
萬用字元 | 說明 |
---|---|
* | 匹配任意element節點 |
@* | 匹配任意attribute節點 |
node() | 匹配任意節點 |
使用萬用字元的一些範例
Path 表示式 | 說明 |
---|---|
/bookstore/* | 選擇<bookstore> 下的所有children element節點 |
//* | 選擇文件中的全部節點 |
//title[@*] | 選擇文件中全部的<title> ,其至少含有一個屬性 |
XPath可以使用|
來選擇多個path
Path 表示式 | 說明 |
---|---|
//book/title | //book/price | 選擇所有<book> 下的<title> 及<price> |
//title | //price | 選擇文件中的全部的<title> 及<price> |
/bookstore/book/title | //price | 選擇文件中<bookstore> 中的<book> 中的<title> ,及全部的<price> |
要找到網頁中某個element的XPath,在Chrome有一個叫XPath Helper的擴充工具,打開後按住shift然後將滑鼠游標移到網頁上即可顯示該element的XPath。
恩...抄得很累,不過至少有個印象:p
參考:
感謝您 這篇超實用
回覆刪除