第一部分:xpath
一:基础语法
1.表达式:
nodename # 节点名
/ # 若在起始位置,则表明从根节点选取node;若不在起始位置,表明选取子节点,本意都是选取全部子节点
// # 从任意位置选取node节点
@ # 选取属性
* # 通配符
. #当前节点复制代码
2.谓语:
[n] # 第n个, -- eg:第一个[1]
[last()] # 最后一个
[position()<n] # 第n个位置之前的全部指定节点
node[@attr] # 拥有attr属性的节点
node[@attr='val'] # 属性attr的值为val的节点
node[contains(@class, 'val')] # class属性中包含val的节点复制代码
二:轴
A/child::B ==> A/B # 选取A节点的子节点B
parent # 父节点
descendant # 所有后代节点
ancestor # 所有先辈节点
descendant-or-self # 所有后代元素及其本身
preceding-sibling # 所有先辈节点及其本身
following-sibling # 当前节点后面的同级节点
preceding # 整个文档中,当前节点之前的所有节点
preceding-sibling # 父节点中,当前节点之前的所有同级节点
following # 整个文档中,当前节点之后的所有节点
self # 当前节点本身
attribute # 当前节点的所有属性
namespace # 当前节点所有的命名空间复制代码
三:运算符
| # 并集
+ # 加法
- # 减法
* # 乘法
div # 除法
= # 等于
!= # 不等于
< # 小于
<= # 小于
> # 大于
>= # 大于等于
or # 或
and # 与
mod # 取余复制代码
四:示例
question # 选取所有 question 元素的所有子节点
/question #选取根元素 question
question/a # 选取 question 元素下所有为 a 的子元素
//div # 选取所有的 div 元素,不论其出现在文档的任何地方
question//div # 选取 question 元素下所有的 div 后代元素 (/ 选取的是直接子元素,这里是所有的后代元素)
question//span/text() #选取 question 元素下所有 span 元素中的文本值
question//a/@href #选取 question 元素下所有 a 元素中的 href 属性值。 @ 后面可以是任意属性名,均可以取到值
/question/div[1] # 选取 question 的第一个 div 子元素。 注意这里第一个是从索引 1 开始的
/question/div[last()] # 选取 question 第最后一个 div 子元素
/question/div[last()-1] # 选取 question 的倒数第二个 div 子元素
//div[@lang] # 选取所有拥有lang 属性的 div 元素
//div[@lang='eng'] # 选取所有 lang 属性为 eng 的 div 元素
/div/* # 选取属于 div 元素的所有子节点
//* # 选取所有元素
//div/a | //div/p #选 取所有 div 元素的 a 元素或者 p 元素
//span | //input # 选取文档中所有的 span 和 input 元素复制代码
五:补充
starts-with #匹配一个属性开始位置的关键字
eg: //input[starts-with(@name,'name1')] #查找name属性中开始位置包含'name1'关键字的页面元素
contains #匹配一个属性值中包含的字符串
eg: //input[contains(@name,'na')] #查找name属性中包含na关键字的页面元素
复制代码
第二部分: 项目创建
1.