XPath常见用法示例,XPath基础语法
XPath(XML Path Language)是一种用于在XML文档中查找信息的语言,广泛应用于HTML解析、网页抓取、Web自动化测试等领域。本文将详细介绍XPath的基本语法,并提供常见用法示例,帮助您更好地理解和使用XPath。
XPath常见用法示例
在这部分,我们通过表格的形式展示常见的XPath查询方式,并附上相应的样例。表格包括XPath表达式、用法和应用场景。
XPath表达式 | 用法描述 | 示例HTML | 结果示例 |
---|---|---|---|
//* | 选择所有节点 | <html><body><div>Test</div></body></html> | 选择html 、body 、div 等所有节点 |
//div | 选择所有div 元素 | <div class="container"><p>Text</p></div> | 选择所有的div 元素 |
//div[@class='container'] | 选择class 为container 的div 元素 | <div class="container"><p>Text</p></div> | 选择class="container" 的div 元素 |
//a[contains(@href, 'example')] | 选择href 属性中包含example 的a 标签 | <a href="https://example.com">Link</a> | 选择href 包含example 的a 标签 |
//h1[text()='Hello World'] | 选择文本为Hello World 的h1 标签 | <h1>Hello World</h1> | 选择文本内容为“Hello World”的h1 标签 |
//a[@href='https://example.com'] | 选择href 为https://example.com 的a 标签 | <a href="https://example.com">Example</a> | 选择href 为https://example.com 的a 标签 |
//div/p | 选择div 标签下的所有p 标签 | <div><p>First</p><p>Second</p></div> | 选择div 标签下的所有p 标签 |
//div[1] | 选择第一个div 元素 | <div><p>First</p></div><div><p>Second</p></div> | 选择第一个div 元素(包含First 文本的div ) |
//div[last()] | 选择最后一个div 元素 | <div><p>First</p></div><div><p>Second</p></div> | 选择最后一个div 元素(包含Second 文本的div ) |
//a[starts-with(@href, 'https')] | 选择href 以https 开头的a 标签 | <a href="https://example.com">Example</a> | 选择href 以https 开头的a 标签 |
//ul/li[position()=2] | 选择ul 中的第二个li 元素 | <ul><li>Item 1</li><li>Item 2</li><li>Item 3</li></ul> | 选择第二个li 元素(Item 2 ) |
XPath基础语法
XPath的语法结构基于路径表达式,通过路径选择节点。以下是XPath常用语法和操作符。
1 节点选择路径
XPath通过路径表示文档结构,节点选择路径分为两类:
-
绝对路径:从文档的根节点开始选择路径,路径以斜杠
/
开头。例如:/html/body/div
,表示从根节点开始查找html
,然后是body
,再到div
。 -
相对路径:从当前节点开始选择路径,路径不以斜杠
/
开头。例如:body/div
,表示从当前节点选择body
中的div
。
2 节点类型选择
-
通配符
*
:选择当前节点的所有子节点。例如:/html/body/*
,表示选择body
节点下的所有直接子节点。 -
节点名称:选择特定名称的节点。例如:
/html/body/div
,表示选择body
下的所有div
节点。
3 选择元素的属性
-
@符号:用来选择元素的属性。选择某个属性值时,需要在属性名前加
@
符号。例如://div[@id='main']
,表示选择id
为main
的div
节点。 -
多条件属性选择:可以通过多个属性值来选择节点。例如:
//a[@href='https://example.com' and @target='_blank']
,表示选择href
为https://example.com
且target
为_blank
的a
节点。
4 使用索引选择节点
-
节点索引:通过索引选择第几个节点,索引从1开始。例如:
//div[1]
,表示选择第一个div
节点。 -
范围选择:选择节点的某一范围。例如:
//div[position() <= 3]
,表示选择前3个div
节点。 -
最后一个节点:选择最后一个节点。例如:
//div[last()]
,表示选择div
标签中的最后一个节点。
5 使用文本选择节点
-
选择指定文本:使用
text()
函数来查找具有特定文本的节点。例如://div[text()='Hello']
,表示选择文本内容为“Hello”的div
节点。 -
包含某个子字符串:使用
contains()
函数查找属性值中包含某个子字符串的节点。例如://a[contains(@href, 'example')]
,表示选择href
属性中包含example
的a
节点。
6 逻辑运算符
XPath支持常见的逻辑运算符进行多条件查询:
-
and:逻辑与,表示两个条件都为真。例如:
//a[@href='https://example.com' and @target='_blank']
。 -
or:逻辑或,表示至少有一个条件为真。例如:
//a[@href='https://example.com' or @href='https://example2.com']
。
7 常用函数
XPath还提供了丰富的函数,可以增强查询的能力:
-
contains():检查属性值中是否包含某个子串。例如:
//div[contains(@class, 'active')]
,表示选择class
属性包含active
的div
。 -
starts-with():检查属性值是否以某个子串开头。例如:
//a[starts-with(@href, 'https://')]
,表示选择href
属性以https://
开头的a
标签。 -
text():选择文本节点。例如:
//p[text()='Welcome']
,表示选择文本内容为“Welcome”的p
标签。 -
position():获取当前节点的位置。例如:
//ul/li[position()=1]
,表示选择第一个li
节点。