什么是XPath?
xpath(XML Path Language)是一门在XML和HTMl文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历.
XPath开发工具
- Chrome插件XPath Helper.
- Firefox插件XPath Checker和Try XPath
XPath语法
使用方式
使用//获取整个界面当中的元素,然后写签名,然后再写谓词进行提取。比如
//div[@class='abc']
需要注意的知识点
/
和//
的区别:- /代表只获取直接子节点。
- //获取子孙节点。一般//用得比较多。当然也要视情况而定。
- contains: 有时候某个属性中包含了多个值,那么可以使用
contains
函数。实例代码如下//div[contains(@class, 'job_detail')]
- 谓语中的下标是从1开始的,不是从0开始
选取节点
XPath使用路径表达式来选取XML文档中的节点或者节点集.这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似.
表达式 | 描述 | 示例 | 结果 |
---|---|---|---|
nodename | 选取此节点的所有子节点 | bookstore | 选取bookstore下所有的子节点 |
/ | 如果在最前面,代表从根节点选取.否则选择某节点下的某个子节点 | /bookstore | 选取根元素下所有的bookstore节点 |
// | 从全局节点中选择节点,随便在哪个位置 | //book | 从全局节点中找到所有的book节点 |
@ | 选取某个节点的属性 | //book[@class] | 选择所有book中拥有class属性的节点 |
谓语
谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中.
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达的结果
路径表达式 | 描述 |
---|---|
/bookstore/book[1] | 选取bookstore下的第一个子元素 |
/bookstore/book[last()] | 选取bookstore下的最后一个book元素 |
/bookstore/book[position()<3] | 选取bookstore下前面两个子元素 |
/book[@price] | 选取拥有price属性的book元素 |
/book[@price=10] | 选取所有属性price等于10的book元素 |
/book[contains(@class, ‘fl’)] | 模糊匹配class属性中有fl 值的元素 |
/book[start-with(@class, ‘fl’)] | 匹配class属性中以fl 开头的元素 |
/book[ends-with(@class, ‘fl’)] | 匹配class属性中以fl 结尾的元素 |
通配符
*表示通配符.
通配符 | 描述 | 示例 | 结果 |
---|---|---|---|
* | 匹配任意节点 | /bookstore/* | 选取bookstore下的所有子元素. |
@* | 匹配节点中的任意属性 | //book[@*] | 选取所有带属性的book元素. |
选取多个路径
通过在路径表达式中使用"|"运算符,可以选择若干路径
//bookstore/book | //book/title
# 选取所有book元素以及book元素下所有的title元素
运算符
运算符 | 描述 | 示例 | 返回值 |
---|---|---|---|
| | 计算两个节点集 | //book | //cd | 返回所拥有book和cd元素的节点集 |
+ | 加法 | 6 + 4 | 10 |
- | 减法 | 6 - 4 | 2 |
* | 乘法 | 6 * 4 | 24 |
div | 除法 | 8 div 4 | 2 |
= | 等于 | price=9.80 | 如果price是9.80,则返回true.如果price是9.90,则返回false |
!= | 不等于 | price != 9.80 | 如果price是9.90,则返回true.如果price是9.80,则返回false |
< | 小于 | price < 9.80 | 如果price是9.00,则返回true.如果price是9.90,则返回false |
<= | 小于等于 | price <= 9.80 | 如果price是9.00,则返回true.如果price是9.90,则返回false |
> | 大于 | price > 9.80 | 如果price是9.90,则返回true.如果price是9.00,则返回false |
>= | 大于等于 | price >= 9.80 | 如果price是9.90,则返回true.如果price是9.00,则返回false |
or | 或者 | price = 9.80 or price = 9.70 | 如果price是9.80,则返回true.如果price是9.50,则返回false |
and | 与,并且 | price > 9 and price < 9.90 | 如果price是9.80,则返回true.如果price是8.50,则返回false |
mod | 计算除法的余数 | 5 mod 2 | 1 |