首页 > 代码库 > [XPath/Python] XPath 与 lxml (三)XPath 坐标轴
[XPath/Python] XPath 与 lxml (三)XPath 坐标轴
本章我们将沿用上一章的 XML 示例文档。
XPath 坐标轴
坐标轴用于定义当对当前节点的节点集合。
坐标轴名称 | 含义 |
ancestor | 选取当前节点的所有先辈元素及根节点。 |
ancestor-or-self | 选取当前节点的所有先辈以及当前节点本身。 |
attibute | 选取当前节点的所有属性。 |
child | 选取当前节点的所有子元素。 |
descendant | 选取当前节点的所有后代元素。 |
descendant-or-self | 选取当前节点的所有后代元素以及当前节点本身。 |
following | 选取文档中当前节点的结束标签之后的所有节点。 |
following-sibling | 选取当前节点之后的所有同级节点 |
namespace | 选取当前节点的所有命名空间节点。 |
parent | 选取当前节点的父节点。 |
preceding | 选取当前节点的开始标签之前的所有节点。 |
preceding-sibling | 选取当前节点之前的所有同级节点。 |
self | 选取当前节点。 |
位置路径表达式
位置路径可以是绝对路径,也可以是相对路径。绝对路径以 "/" 开头。每条路径包括一个或多个步,每步之间以 "/" 分隔。
绝对路径:/step/step/...
相对路径:step/step/...
每步根据当前节点集合中的节点计算。
步(step)包括三部分:
- 坐标轴(axis):定义所选节点与当前节点之间的关系。
- 节点测试(node-test):识别某个坐标轴内部的节点。
- 预判(predicate):提出预判条件对节点集合进行筛选。
步的语法:
坐标轴::节点测试[预判]
实例
# child::nodename 选取所有属于当前节点的 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 选取当前节点的 lang 属性,等价于 ‘./@lang‘>>> root.xpath(‘//*[@lang]‘)[0].xpath(‘attribute::lang‘)[‘eng‘]>>> root.xpath(‘//*[@lang]‘)[0].xpath(‘@lang‘)[‘eng‘]# child::* 选取当前节点的所有子元素,等价于 ‘./*‘>>> root.xpath(‘child::*‘)[<Element book at 0x2d88878>, <Element book at 0x2d88738>]>>> root.xpath(‘./*‘)[<Element book at 0x2d88878>, <Element book at 0x2d88738>]# attribute::* 选取当前节点的所有属性,等价于 ‘./@*‘>>> root.xpath(‘//*[@*]‘)[0].xpath(‘attribute::*‘)[‘eng‘]>>> root.xpath(‘//*[@*]‘)[0].xpath(‘@*‘)[‘eng‘]# child::text() 选取当前节点的所有文本子节点,等价于 ‘./text()‘>>> root.xpath(‘child::text()‘)[‘\n ‘, ‘\n ‘, ‘\n‘]>>> root.xpath(‘./text()‘)[‘\n ‘, ‘\n ‘, ‘\n‘]# child::node() 选取当前节点所有子节点,等价于 ‘./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 选取当前节点所有 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 选取当前节点所有 book 先辈>>> root.xpath(‘.//title‘)[0].xpath(‘ancestor::book‘)[<Element book at 0x2d88878>]# ancestor-or-self::book 选取当前节点的所有 book 先辈以及如果当前节点是 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 选取当前节点的所有 price 孙节点,等价于 ‘./*/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>]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。