2025-09-10 09:55AM
XPath的核心是路径表达式,它就像我们熟悉的文件系统路径:
/
: 从根节点开始选取(像Linux的绝对路径)。
//
: 从当前节点开始,选择文档中所有满足条件的节点,无论它们在哪个位置(像文件搜索)。
1. 节点(Node):
在XPath中,文档是由各种节点构成的:
元素节点:<div>、<p>、<a>等标签
属性节点:class="example", href="https://..." 中的 class 和 href。
文本节点:标签之间的文字内容,例如:<p>这是一个文本</p>中的“这是一个文本”
2. 最常见的语法表达式:
表达式 | 说明 | 示例(假设在一个HTML文档中) | ||
---|---|---|---|---|
节点名 |
选取此节点的所有子节点。 | p 选取所有 <p> 元素。 |
||
/ |
从根节点开始选取(绝对路径)。 | /html/body/div 选取从根html -> body -> div的路径。 |
||
// |
从任意位置开始选取,不考虑层级(相对路径)。 | //div 选取文档中所有的 <div> 元素。 |
||
. |
选取当前节点。 | |||
.. |
选取当前节点的父节点。 | |||
@ |
选取属性。 | //a/@href 选取所有 <a> 标签的 href 属性值。 |
||
* |
通配符,匹配任何元素节点。 | //div/* 选取所有 <div> 元素的所有子元素。 |
||
@* |
匹配任何属性节点。 | //a/@* 选取所有 <a> 标签的所有属性。 |
||
[] |
谓语(Predicate),用来查找特定的节点或包含特定值的节点。 | //div[1] 选取第一个 <div> 元素。//a[@class=‘link’] 选取所有 class 属性为“link”的 <a> 标签。 |
||
` | ` | 选取多个路径。`//div //p选取所有 <div>和所有 <p>` 元素。 |
3. 谓语(Predicate)
谓语放在方括号 [] 中,用来对节点进行更精细的筛选
3.1 按位置筛选
//div[1]
:选取第一个 <div>
元素。
//div[last()]
:选取最后一个 <div>
元素。
//div[position() < 3]
:选取前两个 <div>
元素。
3.2 按属性筛选
//div[@id]
:选取所有拥有 id
属性的 <div>
。
//div[@class=‘container’]
:选取所有 class
属性等于“container”的 <div>
。
//a[contains(@href, ‘example.com’)]
:选取所有 href
属性中包含“example.com”的 <a>
标签。(contains()
是函数,非常常用!)
3.3 按内容筛选
//p[text()=‘Hello’]
:选取文本内容精确等于“Hello”的 <p>
标签。
//p[contains(text(), ‘Hello’)]
:选取文本内容包含“Hello”的 <p>
标签。
3.4 组合条件
//div[@class=‘a’ and @id=‘b’]
:并且的关系。
//div[@class=‘a’ or @id=‘b’]
:或者的关系。
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论