代码改变世界

xpath常用的定位规则方法解析

2024-06-07 10:24  HQS_blog  阅读(71)  评论(0编辑  收藏  举报

 

XPath 是一种在 XML 文档中查找信息的语言,它同样适用于 HTML 文档,因为 HTML 可以被看作是一种特殊的 XML。在 XPath 中,你可以使用各种表达式来定位元素。以下是 XPath 中元素定位的一些常见规则和方法:

1. 基本路径

  • / 表示根元素。
  • // 表示选择文档中的节点,而不考虑它们的位置。
  • . 表示当前节点。
  • .. 表示父节点。

2. 通过标签名定位

  • tagname 选择所有名为 tagname 的子元素。
  • //tagname 选择所有名为 tagname 的元素,不论它们位于文档中的何处。

3. 通过属性定位

  • [@attributename] 选择带有名为 attributename 的属性的元素。
  • [@attributename='value'] 选择带有名为 attributename 的属性且属性值等于 value 的元素。
  • [attributename1 and attributename2] 选择同时满足多个条件的元素。

4. 文本内容定位

  • contains(text(), 'substring') 选择文本内容包含 substring 的元素。
  • text()='exactstring' 选择文本内容完全等于 exactstring 的元素。

5. 层级和位置定位

  • parent::tagname 选择父节点为 tagname 的所有元素(XPath 2.0)。
  • child::tagname 选择所有名为 tagname 的子元素(可以简写为 tagname)。
  • ancestor::tagname 选择所有祖先节点为 tagname 的元素。
  • descendant::tagname 选择所有后代节点为 tagname 的元素(可以简写为 //tagname)。
  • tagname[n] 选择第 n 个 tagname 元素(n 从 1 开始)。
  • tagname[last()] 选择最后一个 tagname 元素。
  • tagname[position()=n] 选择位置为 n 的 tagname 元素。

6. 逻辑操作符

  • andor 和 not() 可以在 XPath 表达式中用于组合多个条件。

7. 通配符

  • * 匹配任何元素节点。
  • @* 匹配任何属性节点。

8. 命名空间

  • 如果你的 XML 或 HTML 文档使用了命名空间,你可能需要使用命名空间前缀来定位元素,例如 prefix:tagname

9. 函数

  • XPath 提供了许多函数,如 last()position()concat()starts-with()substring() 等,这些函数可以在 XPath 表达式中用于更复杂的条件判断或字符串操作。

10. 示例

  • //div[@class='content'] 选择所有 class 属性值为 content 的 div 元素。
  • //a[contains(text(),'点击这里')] 选择文本内容包含“点击这里”的所有 a 元素。
  • //form[@id='loginForm']/input[1] 选择 id 为 loginForm 的 form 元素中的第一个 input 子元素。

注意事项

  • XPath 是大小写敏感的。
  • 在使用 XPath 表达式时,请确保它与文档的当前结构相匹配。
  • 不同的 XPath 引擎可能支持不同的 XPath 版本(XPath 1.0、XPath 2.0 等),因此某些表达式可能在某些环境中不起作用。
  • 在 Web 自动化和爬虫中,XPath 是一种常用的元素定位方式,但也要注意它可能不如其他方式(如 CSS 选择器)稳定或高效。

 

//本文来自文心一言