XPath路径表达式怎么用 XPath节点选取方法
技术百科
煙雲
发布时间:2025-12-23
浏览: 次 XPath是用于在XML/HTML中精准定位节点的语法,核心为从根或某节点出发按层级或条件逐步查找;常用绝对路径(如/html/body/div[1]/p)、相对路径(如//div/p)及轴(child::、descendant::等)与谓语(如[@class='title'])组合实现灵活选取。
XPath 路径表达式是用来在 XML 或 HTML 文档中定位节点(元素、属性、文本等)的一套语法,核心是“从根或某节点出发,按层级或条件一步步找到目标”。用对了,就能精准提取数据;写错了,就容易匹配不到或选错范围。
基础路径写法:从根开始或相对定位
最常用的是绝对路径(以 / 开头)和相对路径(不以 / 开头):
-
/html/body/div[1]/p:从文档根开始,逐层指定元素,定位第一个
下的- //div/p:双斜杠表示“任意层级”,匹配所有
元素下的直接子- .//span[@class='title']:点开头表示“从当前节点开始查找”,常用于嵌套解析时避免重写全路径
常用节点选取方法:靠轴(axis)和谓语(predicate)
真正灵活的选取靠的是“轴”描述方向、“谓语”加筛选条件:
-
child::(可省略):找直接子节点,如
div/child::a等价于div/a -
descendant::(常用
//替代):找所有后代,不限层级,如//ul/descendant::li -
following-sibling:::找后面同级的兄弟节点,如
h2/following-sibling::p[1]取紧接在后的第一个段落 - 谓语写在方括号里,支持属性、位置、文本内容判断:
//input[@type='submit']、//li[3]、//a[text()='登录']
实用技巧:处理常见难点
实际用 XPath 抓网页或解析 XML 时,几个易错点要留意:
- HTML 中的命名空间(如 SVG、XHTML)可能让
//div失效,需先声明或用通配符*/div - 属性值含空格或动态 ID,别硬写完整值,改用包含匹配:
//div[contains(@class, 'btn-primary')] - 文本内容有换行缩进?用
normalize-space()清理://p[normalize-space(text())='立即购买'] - 多个条件组合用
and或or://button[@type='submit' and contains(@class,'save')]
基本上就这些。XPath 不复杂但容易忽略细节,多练几个真实 HTML 片段,比如找表格第二列、带 data-id 的按钮、或者某个 div 里最后一个非空段落,手感就上来了。
- //div/p:双斜杠表示“任意层级”,匹配所有
# ai
# 的是
# 就能
# 能让
# 几个
# 多个
# 第一个
# 来了
# 重写
# 文档
# win
# input
# svg
# class
# html
# xml
# red
# 命名空间
# 错了
# ul
# li
# xhtml
# 相对定位
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- C++如何获取CPU核心数?(std::threa
- php报错怎么查看_定位PHP致命错误与警告的方法
- Win10如何设置双wan路由器 Win10双wa
- Python如何创建带属性的XML节点
- Win10怎样卸载TeamViewer_Win10
- Drupal 中 HTML 链接被重复转义导致渲染
- c++ namespace命名空间用法_c++避免
- Win11怎么快速锁屏_Win11一键锁屏快捷键W
- Win11怎么设置快速访问主页_Windows11
- 如何使用Golang defer优化性能_减少不必
- Win11怎么更改电脑名称_Windows 11修
- Win11怎么关闭小组件_Win11禁用任务栏天气
- Windows 10怎么隐藏特定更新补丁_Wind
- Win11怎么设置应用分屏_Windows11贴靠
- Win11怎么关闭自动调节屏幕亮度_Windows
- Win11怎么开启远程桌面_Win11系统远程桌面
- Windows 11怎么设置默认解压软件_Wind
- Win11怎么关闭自动修复_跳过Win11开机自动
- 如何在Windows上设置闹钟和计时器_系统自带的
- Linux如何安装JDK11_Linux环境变量配
- Golang如何遍历目录文件_Golang fil
- c++中如何求一个数的平方根_c++ sqrt函数
- PHP怎么接收前端传的时间戳_处理时间戳参数转换技
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- 如何使用Golang模拟请求超时_Golang c
- php增删改查报错1054怎么办_字段名错误排查修
- 如何使用Golang实现基本类型比较_Golang
- 如何使用正则表达式提取以编号开头、后跟多个注解的完
- 获取 PHP 文件最后修改时间的正确方法
- 如何使用Golang安装依赖库_管理模块和第三方包
- Windows服务无法启动错误1067是什么_进程
- Win11怎么设置环境变量_Win11配置Path
- php中$this和::能混用吗_对象与静态作用域
- 如何使用Golang反射创建map对象_动态生成键
- Win11怎么开启HDR模式_Windows 11
- VSC怎么创建PHP项目_从零开始搭建项目的步骤【
- 如何优化Golang程序CPU性能_Golang
- 如何用正则表达式精确匹配“start”到“end”
- Win11怎么关闭VBS安全性_Windows11
- Win11怎么关闭自动调节亮度 Win11禁用内容
- 如何使用Golang实现微服务事件驱动_使用消息总
- php485能和物联网模块通信吗_php485对接
- How to Properly Use NumPy
- Bpmn 2.0的XML文件怎么画流程图
- 微信企业付款回调PHP怎么接收_处理企业付款异步通
- windows系统找不到无线网络怎么办_windo
- Windows10电脑怎么设置虚拟内存_Win10
- Windows怎样关闭锁屏广告_Windows关闭
- Go 语言标准库为何不提供泛型 Contains
- php条件判断怎么写_ifelse和switchc

语(如[@class='title'])组合实现灵活选取。
QQ客服