XPath轴用于定义从当前节点出发的导航方向,如child::、parent::、ancestor::等,结合节点测试和谓词可精准定位XML/HTML中的元素,提升数据提取效率。
在使用XPath进行XML或HTML文档解析时,选取节点是核心操作。除了基本的路径表达式(如//div、/html/body/p),XPath提供了丰富的“轴”(Axis)机制,用于定位与当前节点相关联的其他节点。掌握这些轴的用法,能让你更灵活、精准地抓取所需数据。
XPath轴定义了从当前节点出发,可以访问的节点方向和范围。每个轴代表一个特定的节点集合,比如父节点、子节点、祖先节点等。轴的基本语法为:
axisname::nodetest[predicate]
其中:
child、parent
div、*(所有元素)选取当前节点的直接子节点。
示例:
child::div:选择所有子级元素
-
child::*:选择所有子元素节点
-
child::text():选择所有子文本节点
简写:div 等价于 child::div
2. parent:: —— 父节点轴
选取当前节点的父节点。
示例:
-
parent::*:选择父元素
-
parent::div[@class="container"]:选择父节点是否为特定div
简写:.. 等价于 parent::*
3. ancestor:: —— 祖先节点轴
选取当前节点的所有祖先节点(父、祖父、曾祖父等)。
示例:
-
ancestor::div:选择所有祖先中的div元素
-
ancestor::*[1]:选择最近的一个祖先元素(即父节点)
-
ancestor::body:检查是否在body内部
4. descendant:: —— 后代节点轴
选取当前节点的所有后代节点(子、孙、曾孙等)。
示例:
-
descendant::span:选择所有嵌套层级的span
-
div/descendant::input:在div内找所有input
简写:// 在路径中表示descendant::,如div//input
5. following-sibling:: —— 后面的兄弟节点
选取当前节点之后的同级节点。
示例:
-
following-sibling::li:选择后面所有的li
-
following-sibling::li[1]:选择下一个li兄弟
-
h2/following-sibling::p[1]:h2后的第一个p
6. preceding-sibling:: —— 前面的兄弟节点
选取当前节点之前的同级节点。
示例:
-
preceding-sibling::li:前面所有li
-
li[3]/preceding-sibling::li[1]:第3个li前的第一个li
7. following:: —— 后面的节点(文档顺序)
选取在当前节点之后的所有节点(按文档顺序,不一定是兄弟)。
示例:
-
h1/following::p:h1之后的所有p标签
- 常用于提取标题后的内容段落
8. preceding:: —— 前面的节点(文档顺序)
选取在当前节点之前的所有节点(按文档顺序)。
示例:
-
p/preceding::h1[1]:当前p之前最近的h1
- 适合反向查找标题或说明文字
9. self:: —— 自身节点
选取当前节点本身。
示例:
-
self::div:如果当前节点是div,则选中
- 常用于条件判断或结合
or使用
10. attribute:: —— 属性节点轴
选取当前节点的属性。
示例:
-
attribute::id 或 @id:选择id属性值
-
attribute::* 或 @*:选择所有属性
简写:@ 是 attribute:: 的缩写
11. namespace:: —— 命名空间轴
选取当前节点的命名空间节点(较少使用)。
示例:
-
namespace::*:列出所有命名空间声明
12. ancestor-or-self:: —— 自身及祖先
包含当前节点及其所有祖先。
示例:
-
ancestor-or-self::div:如果当前是div或其祖先中有div
,都会被选中
- 常用于向上查找容器
13. descendant-or-self:: —— 自身及后代
包含当前节点及其所有后代。
示例:
-
descendant-or-self::a:当前如果是a或包含a后代,都匹配
- 等价于
.//a | .[self::a]
实用技巧与注意事项
合理组合轴和谓语,可以实现复杂定位:
- 定位“某个标题后的第一个段落”:
//h3[text()="简介"]/following::p[1]
- 查找“有特定类名的父级”:
//*[@id="main"]/ancestor::div[@class="wrapper"]
- 获取“兄弟节点中的特定位置”:
//li[@class="active"]/preceding-sibling::li[1]
注意点:
- 轴只影响节点方向,具体结果还需配合节点测试和谓语过滤
- 某些轴(如
following、preceding)按文档顺序排列,可能跨层级
- 性能上,深层遍历(如
descendant::)可能较慢,尽量限定范围
基本上就这些常用的轴。熟练掌握它们,能大幅提升你在爬虫、自动化测试或XML处理中的定位能力。多练习组合使用,你会发现XPath远比想象中强大。
# html
# node
# app
# ai
# win
# 爬虫
# xml处理
# 排列
# red
# 命名空间
# xml
# class
# Namespace
# Attribute
# input
# li
# 自动化
# 文档
# 第一个
# 你在
# 遍历
# 中有
# 所需
# 能让
# 相关联
# 可选
# 可以实现
相关文章:
详解jQuery停止动画——stop()方法的使用
招商网站制作流程,网站招商广告语?
建站主机类型有哪些?如何正确选型
魔方云NAT建站如何实现端口转发?
江苏网站制作公司有哪些,江苏书法考级官方网站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
专业公司网站制作公司,用什么语言做企业网站比较好?
如何在阿里云高效完成企业建站全流程?
XML的“混合内容”是什么 怎么用DTD或XSD定义
,怎么在广州志愿者网站注册?
如何在腾讯云服务器上快速搭建个人网站?
微信小程序 五星评分(包括半颗星评分)实例代码
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
如何用美橙互联一键搭建多站合一网站?
c++ stringstream用法详解_c++字符串与数字转换利器
制作营销网站公司,淘特是干什么用的?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何快速生成凡客建站的专业级图册?
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何快速搭建高效香港服务器网站?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
建站之星展会模板:智能建站与自助搭建高效解决方案
家庭建站与云服务器建站,如何选择更优?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
香港服务器WordPress建站指南:SEO优化与高效部署策略
视频网站制作教程,怎么样制作优酷网的小视频?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
SQL查询语句优化的实用方法总结
h5网站制作工具有哪些,h5页面制作工具有哪些?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
如何确保FTP站点访问权限与数据传输安全?
在线制作视频的网站有哪些,电脑如何制作视频短片?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
高防服务器如何保障网站安全无虞?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
利用JavaScript实现拖拽改变元素大小
如何在景安云服务器上绑定域名并配置虚拟主机?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何在七牛云存储上搭建网站并设置自定义域名?
制作网站怎么制作,*游戏网站怎么搭建?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
建站主机是否等同于虚拟主机?
Python文件管理规范_工程实践说明【指导】
如何选择PHP开源工具快速搭建网站?
红河网站制作公司,红河事业单位身份证如何上传?
Android自定义控件实现温度旋转按钮效果
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何快速搭建二级域名独立网站?
Bpmn 2.0的XML文件怎么画流程图
*请认真填写需求信息,我们会在24小时内与您取得联系。