XPath怎么同时选择多种不同名称的节点 path1 | path2

幻夢星雲
发布: 2025-12-13 08:44:16
原创
708人浏览过
XPath中用|可同时选择多种节点,如//title | //h1,要求同类型、无空格、独立完整路径,结果自动去重并按文档顺序排列。

xpath怎么同时选择多种不同名称的节点 path1 | path2

XPath 中用 |(管道符)可以实现“或”逻辑,同时选择多种不同名称的节点,但要注意:这个语法只在 XPath 1.0 及以上版本中有效,且必须确保两个路径返回的是**同类型的结果**(通常是节点集),并且要写在同一个表达式里,不能有空格隔开(某些解析器对空格敏感)。

正确写法示例

比如想同时选中 <title></title><h1></h1> 节点:

`//title | //h1`

再比如选中所有 div 和所有 span 中的文本节点:

`//div/text() | //span/text()`

常见错误和注意事项

  • 不能加空格:`//title | //h1` ✅,但 `//title | //h1` 中若在 | 前后多加空格,部分老解析器(如某些 DOM 实现或旧版 lxml)可能报错
  • 路径要独立完整:不能写成 `//*(self::title | self::h1)` 来替代(虽然这在 XPath 2.0+ 支持,但 1.0 不支持 `self::` 这种轴写法组合);不过 `//title | //h1` 是最兼容的写法
  • 不支持嵌套“或”结构:像 `//div[@class='a' or @id='b']` 是属性层面的或,和 `|` 完全不同,别混淆
  • 结果自动去重、按文档顺序排列:XPath 会合并两个路径结果,并按它们在 HTML/XML 中出现的先后排序,不会重复

替代方案(XPath 1.0 兼容)

如果想用更紧凑的方式匹配多个标签名,可借助 local-name()

`//*[local-name()='title' or local-name()='h1']`

注意:这种方式适合标签名少且动态变化的场景,但可读性和性能略低于直接用 |

美图云修
美图云修

商业级AI影像处理工具

美图云修 50
查看详情 美图云修

在代码中使用的小提醒

Python 的 lxml浏览器 DevTools 控制台都支持 `|`;但 Selenium 的 find_element(By.XPATH, ...) 同样支持——只要 XPath 表达式本身合法即可。

例如在 Selenium 中:

`driver.find_elements(By.XPATH, "//input | //textarea")`

基本上就这些。用 `|` 是最直接、最广泛支持的多路径联合选择方式,不复杂但容易忽略细节。

以上就是XPath怎么同时选择多种不同名称的节点 path1 | path2的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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