[XPath] XPath 与 lxml (三)XPath 坐标轴
生活随笔
收集整理的這篇文章主要介紹了
[XPath] XPath 与 lxml (三)XPath 坐标轴
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本章我們將沿用上一章的 XML 示例文檔。
?
XPath 坐標(biāo)軸
坐標(biāo)軸用于定義當(dāng)對當(dāng)前節(jié)點的節(jié)點集合。
| 坐標(biāo)軸名稱 | 含義 |
| ancestor | 選取當(dāng)前節(jié)點的所有先輩元素及根節(jié)點。 |
| ancestor-or-self | 選取當(dāng)前節(jié)點的所有先輩以及當(dāng)前節(jié)點本身。 |
| attibute | 選取當(dāng)前節(jié)點的所有屬性。 |
| child | 選取當(dāng)前節(jié)點的所有子元素。 |
| descendant | 選取當(dāng)前節(jié)點的所有后代元素。 |
| descendant-or-self | 選取當(dāng)前節(jié)點的所有后代元素以及當(dāng)前節(jié)點本身。 |
| following | 選取文檔中當(dāng)前節(jié)點的結(jié)束標(biāo)簽之后的所有節(jié)點。 |
| following-sibling | 選取當(dāng)前節(jié)點之后的所有同級節(jié)點 |
| namespace | 選取當(dāng)前節(jié)點的所有命名空間節(jié)點。 |
| parent | 選取當(dāng)前節(jié)點的父節(jié)點。 |
| preceding | 選取當(dāng)前節(jié)點的開始標(biāo)簽之前的所有節(jié)點。 |
| preceding-sibling | 選取當(dāng)前節(jié)點之前的所有同級節(jié)點。 |
| self | 選取當(dāng)前節(jié)點。 |
?
?
?
?
?
?
?
?
?
?
?
?
?
位置路徑表達(dá)式
位置路徑可以是絕對路徑,也可以是相對路徑。絕對路徑以 "/" 開頭。每條路徑包括一個或多個步,每步之間以 "/" 分隔。
?
絕對路徑:/step/step/...
相對路徑:step/step/...
?
每步根據(jù)當(dāng)前節(jié)點集合中的節(jié)點計算。
?
步(step)包括三部分:
- 坐標(biāo)軸(axis):定義所選節(jié)點與當(dāng)前節(jié)點之間的關(guān)系。
- 節(jié)點測試(node-test):識別某個坐標(biāo)軸內(nèi)部的節(jié)點。
- 預(yù)判(predicate):提出預(yù)判條件對節(jié)點集合進行篩選。
步的語法:
坐標(biāo)軸::節(jié)點測試[預(yù)判]?
實例
# child::nodename 選取所有屬于當(dāng)前節(jié)點的 book 子元素,等價于 './nodename' >>> root.xpath('child::book') [<Element book at 0x2d888c8>, <Element book at 0x2d88878>] >>> root.xpath('./book') [<Element book at 0x2d888c8>, <Element book at 0x2d88878>]# attribute::lang 選取當(dāng)前節(jié)點的 lang 屬性,等價于 './@lang' >>> root.xpath('//*[@lang]')[0].xpath('attribute::lang') ['eng'] >>> root.xpath('//*[@lang]')[0].xpath('@lang') ['eng']# child::* 選取當(dāng)前節(jié)點的所有子元素,等價于 './*' >>> root.xpath('child::*') [<Element book at 0x2d88878>, <Element book at 0x2d88738>] >>> root.xpath('./*') [<Element book at 0x2d88878>, <Element book at 0x2d88738>]# attribute::* 選取當(dāng)前節(jié)點的所有屬性,等價于 './@*' >>> root.xpath('//*[@*]')[0].xpath('attribute::*') ['eng'] >>> root.xpath('//*[@*]')[0].xpath('@*') ['eng']# child::text() 選取當(dāng)前節(jié)點的所有文本子節(jié)點,等價于 './text()' >>> root.xpath('child::text()') ['\n ', '\n ', '\n'] >>> root.xpath('./text()') ['\n ', '\n ', '\n']# child::node() 選取當(dāng)前節(jié)點所有子節(jié)點,等價于 './node()' >>> root.xpath('child::node()') ['\n ', <Element book at 0x2d88878>, '\n ', <Element book at 0x2d88738>, '\n'] >>> root.xpath('./node()') ['\n ', <Element book at 0x2d88878>, '\n ', <Element book at 0x2d88738>, '\n']# descendant::book 選取當(dāng)前節(jié)點所有 book 后代,等價于 './/book' >>> root.xpath('descendant::book') [<Element book at 0x2d88878>, <Element book at 0x2d88738>] >>> root.xpath('.//book') [<Element book at 0x2d88878>, <Element book at 0x2d88738>]# ancestor::book 選取當(dāng)前節(jié)點所有 book 先輩 >>> root.xpath('.//title')[0].xpath('ancestor::book') [<Element book at 0x2d88878>]# ancestor-or-self::book 選取當(dāng)前節(jié)點的所有 book 先輩以及如果當(dāng)前節(jié)點是 book 的話也要選取 >>> root.xpath('.//title')[0].xpath('ancestor-or-self::book') [<Element book at 0x2d88878>] >>> root.xpath('.//book')[0].xpath('ancestor-or-self::book') [<Element book at 0x2d88878>] >>> root.xpath('.//book')[0].xpath('ancestor::book') []# child::*/child::price 選取當(dāng)前節(jié)點的所有 price 孫節(jié)點,等價于 './*/price' >>> root.xpath('child::*/child::price') [<Element price at 0x2d88878>, <Element price at 0x2d88738>] >>> root.xpath('./*/price') [<Element price at 0x2d88878>, <Element price at 0x2d88738>] 超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的[XPath] XPath 与 lxml (三)XPath 坐标轴的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java自动装箱与拆箱及其陷阱
- 下一篇: 手工热备份