XPath与lxml_3XPath坐标轴

一、XPath坐标轴

坐标轴用以定义当前节点的节点集合。

坐标轴名称含义
ancestor选取当前节点的所有先辈元素及根节点
ancestor-or-self选取当前节点的所有先辈及当前节点本身
attribute选取当前节点的所有属性
child选取当前节点的所有子元素
descendant选取当前节点的所有后代元素
descendant-or-self选取当前节点的所有后代元素即当前节点本身
following选取文档中当前节点的结束标签之后的所有节点
following-sibling选取当前节点之后的所有同级节点
namespace选取当前节点的所有命名空间节点
parent选取当前节点的父节点
preceding选取当前节点的开始标签之前的所有节点
preceding-sibling选取当前节点之前的所有同级节点
self选取当前节点


二、位置路径表达式

位置路径可以是绝对路径,也可以是相对路径。

绝对路径以/开头,每条路径包括一个或多个步,每步之间以/分割;

绝对路径:/step/step/...

相对路径;step/step/...


三、步step

1 步包含三部分

1.1 坐标轴axis:定义所选节点与当前节点之间的关系

1.2 节点测试node-test:识别某个坐标轴内部的节点

1.3 预判predicate:提出预判条件对节点集合进行筛选


2 步语法

坐标轴::节点测试[预判]


3 举例

# child::nodename 选取所有属于当前节点的 book 子元素,等价于 './nodename'
root.xpath('child::book')
root.xpath('./book')

# attribute::lang 选取当前节点的 lang 属性,等价于 './@lang'
root.xpath('//*[@lang]')[0].xpath('attribute::lang')
root.xpath('//*[@lang]')[0].xpath('@lang')

# child::* 选取当前节点的所有子元素,等价于 './*'
root.xpath('child::*')
root.xpath('./*')

# attribute::* 选取当前节点的所有属性,等价于 './@*'
root.xpath('//*[@*]')[0].xpath('attribute::*')
root.xpath('//*[@*]')[0].xpath('@*')

# child::text() 选取当前节点的所有文本子节点,等价于 './text()'
root.xpath('child::text()')
root.xpath('./text()')

# child::node() 选取当前节点所有子节点,等价于 './node()'
root.xpath('child::node()')
root.xpath('./node()')

# descendant::book 选取当前节点所有 book 后代,等价于 './/book'
root.xpath('descendant::book')
root.xpath('.//book')

# ancestor::book 选取当前节点所有 book 先辈
root.xpath('.//title')[0].xpath('ancestor::book')

# ancestor-or-self::book 选取当前节点的所有 book 先辈以及如果当前节点是 book 的话也要选取
root.xpath('.//title')[0].xpath('ancestor-or-self::book')
root.xpath('.//book')[0].xpath('ancestor-or-self::book')
root.xpath('.//book')[0].xpath('ancestor::book')

# child::*/child::price 选取当前节点的所有 price 孙节点,等价于 './*/price'
root.xpath('child::*/child::price')
root.xpath('./*/price')


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值