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