什麼是XPath 
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 node
• lang="en": attribute node
• Harry 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。
