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

2次阅读

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′]`

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

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

Artflow.ai

可以使用AI生成的原始角色、场景、对话,创建动画故事。

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

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

在代码中使用的小提醒

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

例如在 Selenium 中:

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

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

text=ZqhQzanResources