xpath笔记-转

来自Xavier的笔记:https://segmentfault.com/u/lihanx  and https://segmentfault.com/q/1010000008883941

菜鸟Xpath教程:http://www.runoob.com/xpath/xpath-tutorial.html

一、基本语法

1. 表达式

nodename    # 节点名
/           # 若在起始位置,则表明从根节点选取node;若不在起始位置,表明选取子节点,本意都是选取全部子节点
//          # 从任意位置选取node节点
@           # 选取属性
*           # 通配符

2.谓语

[n]                  # 第n个
[last()]             # 最后一个
[position()<n]       # 第n个位置之前的全部指定节点
node[@attr]          # 拥有attr属性的节点
node[@attr='val']    # 属性attr的值为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        # 取余

四、示例

element_dom.xpath(“/div”)
# 选取根节点的子节点div(包含其全部后代节点)

element_dom.xpath("//p")
# 选取任意位置的p节点

element_dom.xpath("//div[@class='title']")
# 选取class值为title的div节点

element_dom.xpath("//div[@class='item_list']//li/a/@href")
# 选取任意位置的class为item_list的div节点 的全部子节点li 中a节点的href属性

element_dom.xpath("/div/@name")
# 选取div节点的name属性值

element_dom.xpath("/div/descendant::text()")
# 选取div节点全部后代节点的文本

element_dom.xpath("//div/p|//ul/li/a")
# 选取div节点的子节点pa 与 ul/li/a 的并集

element_dom.xpath("//div/p[2]")
# 选取div中名为p的子节点的第2个

element_dom.xpath("//div/*[id='name']")
# 选取div的子节点中id值为name的任意节点

element_dom.xpath("(//div//p)[1]")
# //div//p结果集中的第一个结果