0

0

XPath的//和/有什么区别

畫卷琴夢

畫卷琴夢

发布时间:2026-01-04 12:40:02

|

192人浏览过

|

来源于php中文网

原创

DaGaoPeng(大高朋网团购程序)
DaGaoPeng(大高朋网团购程序)

大高朋团购系统是一套Groupon模式的开源团购程序,开发的一套网团购程序,系统采用ASP+ACCESS开发的团购程序,安装超简,功能超全面,在保留大高朋团购系统版权的前提下,允许所有用户免费使用。大高朋团购系统内置多种主流在线支付接口,所有网银用户均可无障碍支付;短信发送团购券和实物团购快递发货等。 二、为什么选择大高朋团购程序系统? 1.功能强大、细节完善 除了拥有主流团购网站功能,更特别支

下载
“/”表示严格父子路径,要求节点逐层精准嵌套;“//”表示全树扫描匹配,可跨任意层级查找元素。二者区别在于是否依赖dom结构稳定性:/适用于固定模板和可控上下文,//适用于动态页面和全局搜索。

xpath的//和/有什么区别

“/”是严格父子路径,“//”是全树扫描匹配

简单说:/ 要求节点必须紧挨着、一层一层精准嵌套;// 则不管隔几层,只要存在就抓出来。这是 XPath 定位逻辑的根本分水岭。

  • /html/body/div:必须是从根开始, → 直接子 → 直接子 <div>,中间不能跳、不能插兄弟节点<li> <code>//div:整个 HTML 文档里所有 <div> 标签,哪怕它藏在 <code><section><article><div> 五层深,也能命中<li>常见误用:<code>//ul/li/a 看似合理,但若实际结构是 <ul><li><span><a></a></span></li></ul>,那 /a 就失效了——而 //a 仍能拿到
  • 什么时候该用 /,什么时候必须用 //

    不是“哪个更好”,而是“是否可控”。关键看 DOM 结构是否稳定、你是否掌握确切层级。

    • / 的典型场景:
       – 解析固定模板的后台管理页(如 /html/body/div[2]/main/form/input[@name="token"]
       – 配合 response.xpath() 后二次定位(如先取到某个 <div class="card">,再用 <code>./h2/text() 取它的直接标题)
    • // 的刚性需求:
       – 页面由 JS 动态渲染,结构不固定
       – 查找全局唯一语义元素(如 //button[contains(@class,"submit")]
       – Scrapy 中提取列表项内容(//div[@class="item"]/h3/text()),因为每个 item 是独立块,不需要从根算起
    • ./ 和 .// 容易被忽略的上下文差异

      当已经用 xpath() 定位到某个元素对象(比如一个 <div>),后续路径前面加不加点(<code>.),意义完全不同:

      • ./p:只在这个 <div> 的**直接子 <code><p></p>** 中找(1 层深)
      • .//p:在这个 <div> **内部任意深度**的所有 <code><p></p>(可能嵌在 <section></section><article></article> 里)
      • 错误现象举例:用 divs = response.xpath('//div[@class="list"]') 获取多个容器后,写 div.xpath('p/text()')(漏了 .)→ 实际变成从根找 <p></p>,结果为空或错乱
      • divs = response.xpath('//div[@class="list"]')
        for div in divs:
            # ✅ 正确:在当前 div 内部找第一层 p
            title = div.xpath('./p/text()').get()
            # ✅ 正确:在当前 div 内部任意位置找所有 span
            tags = div.xpath('.//span[@class="tag"]/text()').getall()
            # ❌ 错误:这会脱离 div 上下文,去整个文档找 p
            wrong = div.xpath('p/text()').get()
        

        性能和健壮性的隐性权衡

        // 看似方便,但在大型页面或深层嵌套中,它会触发全树遍历;而 / 路径越短、越靠前,执行越快。但代价是:DOM 稍有变动(比如加了个 wrapper <div class="container">),<code>/html/body/... 就全挂。

        • 推荐策略:
           – 优先用 // 快速验证定位逻辑(开发期)
           – 上线前,对高频/关键元素,尝试收缩为 .// + 更稳定的属性(如 iddata-testid
           – 避免 //* 这类无差别通配,尤其在 Scrapy pipeline 中易拖慢解析
        • 真实坑点://div//p//div/p 多扫 N 层,如果页面有 50 个 <div>,每个含 10 层嵌套,性能差距可达毫秒级——对<a style="color:#f60; text-decoration:underline;" title="爬虫" href="https://www.php.cn/zt/19377.html" target="_blank">爬虫</a>吞吐量敏感时不可忽视<p>XPath 的核心不是记符号,而是判断“我此刻是在找一棵树的某条确定枝干,还是在整片森林里搜某种叶子”。选错,轻则定位失败,重则让脚本在上线后静默失效。</p> </div>

相关文章

XML文件如何转换为HTML表格 使用XSLT模板生成网页

C# XmlDocument LoadXml异常 解决根级别数据无效错误

Python lxml html.fromstring 解析HTML为XML树

XQuery是什么 如何用它来从XML数据中提取信息

HTML和XML的区别 XML与HTML语法结构对比

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

上一篇:XSLT怎么实现字符串替换和拼接 下一篇:Java StAX解析器怎么用 StAX流式API解析XML教程

作者最新文章

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
免费爬虫工具有哪些
免费爬虫工具有哪些

免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

790

2023.11.10

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6606

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

842

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1092

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

2106

2024.03.01

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

870

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

30

2025.12.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

530

2023.06.20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

AngularJS教程
AngularJS教程

共24课时 | 4.1万人学习

CSS教程
CSS教程

共754课时 | 42万人学习

最新文章

更多
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号