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路径表达式笔记的主要内容,如果未能解决你的问题,请参考以下文章

xpath路径表达式笔记(转载)

xpath路径表达式

Xpath路径表达式

Xpath语法

xPath 用法总结整理

XPATH路径表达式