xpath路径表达式笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xpath路径表达式笔记相关的知识,希望对你有一定的参考价值。
参考技术A 简单说,xpath就是选择XML文件中节点的方法。
所谓节点(node),就是XML文件的最小构成单位,一共分成7种。
二、选择节点的基本规则
[例1]
bookstore :选取 bookstore 元素的所有子节点。
[例2]
/bookstore :选取根节点bookstore,这是绝对路径写法。
[例3]
bookstore/book :选取所有属于 bookstore 的子元素的 book元素,这是相对路径写法。
[例4]
//book :选择所有 book 子元素,而不管它们在文档中的位置。
[例5]
bookstore//book :选择所有属于 bookstore 元素的后代的 book 元素,而不管它们位于 bookstore 之下的什么位置。
[例6]
//@lang :选取所有名为 lang 的属性。
四、xpath的谓语条件(Predicate)
所谓"谓语条件",就是对路径表达式的附加条件。
所有的条件,都写在方括号"[]"中,表示对节点进行进一步的筛选。
[例7]
/bookstore/book[1] :表示选择bookstore的第一个book子元素。
[例8]
/bookstore/book[last()] :表示选择bookstore的最后一个book子元素。
[例9]
/bookstore/book[last()-1] :表示选择bookstore的倒数第二个book子元素。
[例10]
/bookstore/book[position()<3] :表示选择bookstore的前两个book子元素。
[例11]
//title[@lang] :表示选择所有具有lang属性的title节点。
[例12]
//title[@lang=\'eng\'] :表示选择所有lang属性的值等于"eng"的title节点。
[例13]
/bookstore/book[price] :表示选择bookstore的book子元素,且被选中的book元素必须带有price子元素。
[例14]
/bookstore/book[price>35.00] :表示选择bookstore的book子元素,且被选中的book元素的price子元素值必须大于35。
[例15]
/bookstore/book[price>35.00]/title :表示在例14结果集中,选择title子元素。
[例16]
/bookstore/book/price[.>35.00] :表示选择值大于35的"/bookstore/book"的price子元素。
五、通配符
[例17]
//* :选择文档中的所有元素节点。
[例18]
/ / :表示选择所有第二层的元素节点。
[例19]
/bookstore/* :表示选择bookstore的所有元素子节点。
[例20]
//title[@*] :表示选择所有带有属性的title元素。
六、选择多个路径
用"|"选择多个并列的路径。
[例21]
//book/title | //book/price :表示同时选择book元素的title子元素和price子元素。
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结果集中的第一个结果
以上是关于xpath路径表达式笔记的主要内容,如果未能解决你的问题,请参考以下文章