xpath路徑表達(dá)式筆記

簡單說棚亩,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子元素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吁峻,一起剝皮案震驚了整個(gè)濱河市滑负,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌用含,老刑警劉巖矮慕,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異啄骇,居然都是意外死亡痴鳄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門缸夹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痪寻,“玉大人,你說我怎么就攤上這事虽惭∠鹄啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵芽唇,是天一觀的道長顾画。 經(jīng)常有香客問我,道長匆笤,這世上最難降的妖魔是什么研侣? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮炮捧,結(jié)果婚禮上义辕,老公的妹妹穿的比我還像新娘。我一直安慰自己寓盗,他們只是感情好灌砖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布璧函。 她就那樣靜靜地躺著,像睡著了一般基显。 火紅的嫁衣襯著肌膚如雪蘸吓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天撩幽,我揣著相機(jī)與錄音库继,去河邊找鬼。 笑死窜醉,一個(gè)胖子當(dāng)著我的面吹牛宪萄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播榨惰,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼拜英,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琅催?” 一聲冷哼從身側(cè)響起居凶,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藤抡,沒想到半個(gè)月后侠碧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缠黍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年弄兜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓷式。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡替饿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒿往,到底是詐尸還是另有隱情盛垦,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布瓤漏,位于F島的核電站腾夯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蔬充。R本人自食惡果不足惜蝶俱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望饥漫。 院中可真熱鬧榨呆,春花似錦、人聲如沸庸队。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至竿拆,卻和暖如春宙拉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丙笋。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工谢澈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人御板。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓锥忿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怠肋。 傳聞我的和親對象是個(gè)殘疾皇子敬鬓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容