簡單說棚亩,xpath就是選擇XML文件中節(jié)點(diǎn)的方法。
所謂節(jié)點(diǎn)(node)内舟,就是XML文件的最小構(gòu)成單位,一共分成7種。
- element(元素節(jié)點(diǎn))
- attribute(屬性節(jié)點(diǎn))
- text (文本節(jié)點(diǎn))
- namespace (名稱空間節(jié)點(diǎn))
- processing-instruction (處理命令節(jié)點(diǎn))
- comment (注釋節(jié)點(diǎn))
- root (根節(jié)點(diǎn))
xpath可以用來選擇這7種節(jié)點(diǎn)。不過再菊,下面的筆記只涉及最常用的第一種element(元素節(jié)點(diǎn)),因此可以將下文中的節(jié)點(diǎn)和元素視為同義詞颜曾。
一纠拔、xpath表達(dá)式的基本格式
xpath通過"路徑表達(dá)式"(Path Expression)來選擇節(jié)點(diǎn)。在形式上泛豪,"路徑表達(dá)式"與傳統(tǒng)的文件系統(tǒng)非常類似稠诲。
斜杠(/)作為路徑內(nèi)部的分割符侦鹏。
同一個(gè)節(jié)點(diǎn)有絕對路徑和相對路徑兩種寫法。
絕對路徑(absolute path)必須用"/"起首臀叙,后面緊跟根節(jié)點(diǎn)略水,比如/step/step/...。
相對路徑(relative path)則是除了絕對路徑以外的其他寫法劝萤,比如 step/step渊涝,也就是不使用"/"起首。
"."表示當(dāng)前節(jié)點(diǎn)床嫌。
".."表示當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
二跨释、選擇節(jié)點(diǎn)的基本規(guī)則
nodename(節(jié)點(diǎn)名稱):表示選擇該節(jié)點(diǎn)的所有子節(jié)點(diǎn)
"/":表示選擇根節(jié)點(diǎn)
"http://":表示選擇任意位置的某個(gè)節(jié)點(diǎn)
"@": 表示選擇某個(gè)屬性
三、選擇節(jié)點(diǎn)的實(shí)例
先看一個(gè)XML實(shí)例文檔厌处。
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
[例1]
bookstore :選取 bookstore 元素的所有子節(jié)點(diǎn)鳖谈。
[例2]
/bookstore :選取根節(jié)點(diǎn)bookstore,這是絕對路徑寫法阔涉。
[例3]
bookstore/book :選取所有屬于 bookstore 的子元素的 book元素缆娃,這是相對路徑寫法。
[例4]
//book :選擇所有 book 子元素瑰排,而不管它們在文檔中的位置龄恋。
[例5]
bookstore//book :選擇所有屬于 bookstore 元素的后代的 book 元素,而不管它們位于 bookstore 之下的什么位置凶伙。
[例6]
//@lang :選取所有名為 lang 的屬性郭毕。
四、xpath的謂語條件(Predicate)
所謂"謂語條件"函荣,就是對路徑表達(dá)式的附加條件显押。
所有的條件,都寫在方括號"[]"中傻挂,表示對節(jié)點(diǎn)進(jìn)行進(jìn)一步的篩選乘碑。
[例7]
/bookstore/book[1] :表示選擇bookstore的第一個(gè)book子元素。
[例8]
/bookstore/book[last()] :表示選擇bookstore的最后一個(gè)book子元素金拒。
[例9]
/bookstore/book[last()-1] :表示選擇bookstore的倒數(shù)第二個(gè)book子元素兽肤。
[例10]
/bookstore/book[position()<3] :表示選擇bookstore的前兩個(gè)book子元素。
[例11]
//title[@lang] :表示選擇所有具有l(wèi)ang屬性的title節(jié)點(diǎn)绪抛。
[例12]
//title[@lang='eng'] :表示選擇所有l(wèi)ang屬性的值等于"eng"的title節(jié)點(diǎn)资铡。
[例13]
/bookstore/book[price] :表示選擇bookstore的book子元素,且被選中的book元素必須帶有price子元素幢码。
[例14]
/bookstore/book[price>35.00] :表示選擇bookstore的book子元素笤休,且被選中的book元素的price子元素值必須大于35。
[例15]
/bookstore/book[price>35.00]/title :表示在例14結(jié)果集中症副,選擇title子元素店雅。
[例16]
/bookstore/book/price[.>35.00] :表示選擇值大于35的"/bookstore/book"的price子元素政基。
五、通配符
"*"表示匹配任何元素節(jié)點(diǎn)闹啦。
"@*"表示匹配任何屬性值沮明。
node()表示匹配任何類型的節(jié)點(diǎn)。
[例17]
//* :選擇文檔中的所有元素節(jié)點(diǎn)窍奋。
[例18]
// :表示選擇所有第二層的元素節(jié)點(diǎn)荐健。
[例19]
/bookstore/* :表示選擇bookstore的所有元素子節(jié)點(diǎn)。
[例20]
//title[@*] :表示選擇所有帶有屬性的title元素费变。
六圣贸、選擇多個(gè)路徑
用"|"選擇多個(gè)并列的路徑挚歧。
[例21]
//book/title | //book/price :表示同時(shí)選擇book元素的title子元素和price子元素。