“定点打击”——XPath 使用细则(Just For Selenium WebDriver)

2023-11-02

该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动!

 

Selenium WebDriver中有关元素定位的学习,需要XPath的支持,特此梳理;

 

前言

 

XPath教程

XPath是一门在XML文档中查找信息的语言;

XPath可用来在XML文档中对元素和属性进行遍历;(是W3C XSLT标准的主要元素)

对XPath的理解是很多高级XML应用的基础;

 

最后我们还会附XPath2.0内置函数(链接),以便查阅;

 

主要内容目录:

1.XPath简介:XPath的概念;

2.XPath节点:详细介绍XPath中不同类型的节点,以及节点之间的关系;

3.XPath语法:讲解XPath语法;

4.XPath轴:XPath axes(轴);

5.XPath运算符:列出了可以用于XPath表达式的运算符;

6.XPath实例:使用books.xml演示一些XPath实例;

7.XPath摘要:知识点总结,及下一步学习内容推荐;

 

附:XPath内置函数梳理

 


 

一、XPath简介

 

XPath是一门在XML文档中查找信息的语言;

XPath用于在XML文档中通过元素和属性进行导航;

 

学习前应简单了解:HTML/XHTML、XML/XML命名空间;

 

什么是XPath:

1)XPath使用路径表达式在XML文档中进行导航;

2)XPath包含一个标准函数库;

3)XPath是XSLT中的主要元素;

4)XPath是一个W3C标准;

 

XPath路径表达式:

XPath使用路径表达式来选取XML文档中的节点或者节点集;

这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似;

 

XPath标准函数:

XPath含有超过100个内建函数

这些函数用于字符串值、数值、日期和时间比较;节点和QName处理、序列处理、逻辑值等等;

 

XPath在XSLT中使用:

XPath是XSLT标准中的主要元素;(感兴趣的同学可自行查阅

 

XPath是W3C标准:

XPath于1999.11.16成为W3C标准;

XPath被设计为供XSLT,XPointer以及其他XML解析软件使用;

 


 

二、XPath节点

 

在XPath中,有7种类型的节点:

元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点);

 

XPath术语

1)节点(Node)

在XPath中,有7种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点;

XML文档是被作为节点树来对待的;

树的根被称为文档节点或者根节点;

后续我们会一一见到相应的示例;

这里简单看下:(XML2-1)

<bookstore>#文档节点(最外层节点)

<book>

    <title lang=“ch">鬼吹灯</title>#lang=“ch”是属性节点

    <year>2018</year>#元素节点

</book>

</bookstore>

 

2)基本值(或称原子值,Atomic value)

基本值是无父或无子的节点;

 

3)项目(Item)

项目是基本值或者节点;

 

节点关系

1)父(Parent)

每个元素以及属性都有一个父;(上述示例中book元素就是title和year元素的父)

 

2)子(Children)

元素节点可有0个、1个或多个子;(上述示例中title和year元素都是book元素的子)

 

3)同胞(Sibling)

拥有相同的父的节点;(在上述示例中,title和year都是同胞)

 

4)先辈(Ancestor)

某节点的父、父的父,等等;(上述示例中,title元素的先辈是book和bookstore元素)

 

5)后代(Descendant)

某个节点的子,子的子,等等;(上述示例中,bookstore 的后代是book、title以及year)

 


 

三、XPath语法

 

XPath使用路径表达式来选取XML文档中的节点或节点集;

节点是通过沿着路径(path)或者步(steps)来选取的;

 

XML示例:(XML3-1)

<?xml version=“1.0” encoding=“ISO-8859-1”?>

<bookstore>

<book>

    <title lang=‘eng’>射雕英雄传</title>

    <price>10.0</price>

</book>

<book>

    <title lang=‘ch’>天龙八部</title>

    <price>12.0</price>

</book>

</bookstore>

 

接下来,我们基于这个示例来熟悉和学习XPath的语法;

 

选取节点

XPath使用路径表达式在XML文档中选取节点;节点是通过沿着路径或者step来选取的;

 

路径表达式组成部分示意:

1)nodename:选取此节点的所有子节点;

2)/     :从根节点选取;

3)//    :从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置;

4).    :选取当前节点;

5)..    :选取当前节点的父节点;

6)@    :选取属性;

 

对于上述示例:

bookstore:表示bookstore元素的所有子节点;

/bookstore:选取根元素bookstore;(如果路径起始于正斜杠’/‘,则此路径始终代表到某元素的绝对路径)

bookstore/book:选取属于bookstore的子元素的所有book元素;

//book:选取所有book子元素,而不管它们在文档中的位置;

bookstore//book:选择属于bookstore元素的后代的所有book元素,而不管它们位于bookstore之下的什么位置;

//@lang:选取名为lang的所有属性;

 

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值得节点;

谓语被嵌在方括号【】中;

 

带有谓语的一些路径表达式示例:

/bookstore/book[1]    :选取属于bookstroe子元素的第一个book元素;

/bookstore/book[last()]    :选取属于bookstore子元素的最后一个book元素;

/bookstore/book[last()-1]    :选取属于bookstore子元素的倒数第二个book元素;

/bookstore/book[position()<3]    :选取最前面的两个属于bookstore元素的子元素的book元素;

//title[@lang]    :选取所有拥有名为lang的属性的title属性;

//title[@lang=‘eng’]    :选取所有title元素,且这些元素拥有值为eng的lang属性;

/bookstore/book[price>11.0]    :选取bookstore元素的所有book子元素,且其中price元素的值必须大于11.0;

/bookstore/book[price>11.0]/title    :选取bookstore元素的所有book元素的所有title子元素,且其中book元素的price子元素的值必须大于11.0;

 

选取未知节点:

XPath通配符可用来选取未知的XML元素;

 

部分通配符示意:

*:匹配任何元素节点

@*:匹配任何属性节点

node():匹配任何类型的节点

 

一些使用通配符的路径表达式示意:

/bookstore/*    :选取bookstore元素的所有子元素;

//*    :选取文档中的所有元素;

//title[@*]    :选取所有带有属性的title元素;

 

 

注意:

下标选取是从1开始的,这是W3C的标准,当然个别浏览器可能支持从0开始的;

用做选取的路径表达式的绝对路径都是以/或//开头的;

 

选取若干路径

通过在路径中使用’|’运算符,你可以选取若干路径;

 

一些使用|运算符的路径表达式示例:

//book/title | //book/price    :选取book元素的所有title和price元素

//title | //price    :选取文档中的所有title和price元素;

/bookstore/book/title | //price    :选取属于bookstore元素的book元素的所有title元素,以及文档中所有的price元素;

 

 


四、XPath Axes(轴)

 

我们仍然使用XML3-1的XML示例进行讲解;

 

XPath轴

轴可定义相对于当前节点的节点集;

 

轴名称及示意

ancestor:选取当前节点的所有先辈(父、祖父等);

ancestor-or-self:选取当前节点的所有先辈(父、祖父等),以及当前节点本身;

attribute:选取当前节点的所有属性;

child:选取当前节点的所有子元素;

descendant:选取当前节点的所有后代元素(子、孙等);

descendant-or-self:选取当前节点的所有后代元素(子、孙等),及当前节点本身;

following:选取文档中当前节点的结束标签之后的所有节点;

namespace:选取当前节点的所有命名空间节点;

parent:选取当前节点的父节点;

preceding:选取文档中当前节点的开始标签之前的所有节点;

preceding-sibling:选取当前节点之前的所有的同级节点;

self:选取当前节点;

 

 

位置路径表达式:

位置路径可以是绝对的,也可以是相对的;

绝对路径起始于正斜杠(/),而相对路径不会这样;在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割;

 

绝对位置路径:

/step/step/…

 

相对位置路径:

step/step/…

 

每个步 均根据当前节点集之中的节点来进行计算;

 

步(step)包括:

1)轴(axis)

定义所选节点与当前节点之间的树关系;

 

2)节点测试(node-test)

识别某个轴内部的节点;

 

3)零个或者更多谓词(predicate)

更深入的提炼所选的节点集;

 

步的语法:

轴名称::节点测试[谓词]

 

一些使用步语法的示例:

child::book    :选择所有属于当前节点的子元素的book节点;

attribute::lang    :选取当前节点的lang属性;

child::*    :选取当前节点的所有子元素;

attribute::*    :选取当前节点的所有属性;

child::text()    :选择当前节点的所有文本子节点;

child::node()    :选择当前节点的所有子节点;

descendant::book    :选择当前节点的所有book后代;

ancestor::book    :选择当前节点中所有book先辈;

ancestor-or-self:book    :选取当前节点的所有book先辈以及当前节点(如果此节点是book节点);

child::*/child::price    :选取当前节点的所有price孙节点;

 

 


五、XPath运算符

 

XPath表达式可返回节点集、字符串、逻辑值以及数字;

 

XPath运算符

下列是可用在XPath表达式中的运算符:

 

|    -> 计算两个节点集 -> //book | //cd -> 返回所有拥有book和cd元素的节点集;

 

+    ->加法->数字计算返回数字

-    ->减法->数字计算返回数字

*    ->乘法->数字计算返回数字

div    ->除法->数字计算返回数字

mod    ->计算除法的余数->数字计算返回数字

 

=    ->等于->比较运算 返回bool值 true或false

!=    ->不等于->比较运算 返回bool值 true或false

<    ->小于->比较运算 返回bool值 true或false

<=    ->小于或等于->比较运算 返回bool值 true或false

>    ->大于->比较运算 返回bool值 true或false

>=    ->大于或等于->比较运算 返回bool值 true或false

or    ->或->逻辑运算 返回bool值 true或false

and    ->与->逻辑运算 返回bool值 true或false

 

 


六、XPath实例

 

我们使用了w3school上的原版示例books.xml并做了些许名称变更;

 

XML示例:(XML6-1)

<?xml version=“1.0” encoding=“ISO-8859-1”?>

<bookstore>

<book category=“厨房”>

    <title lang=‘en’>厨房攻略1</title>

    <author>周大厨</author>

    <year>2018</year>

    <price>10.0</price>

</book>

<book category=“传记”>

    <title lang=‘en’>中华传记1</title>

    <author>党和人民</author>

    <year>2018</year>

    <price>11.0</price>

</book>

<book category=“历史” cover=“古代史">

    <title lang=‘en’>宋史</title>

    <author>党和人民</author>

    <year>2018</year>

    <price>12.0</price>

</book>

<book category=“历史”>

    <title lang=‘en’>近现代史</title>

    <author>党和人民</author>

    <year>2018</year>

    <price>10.0</price>

</book>

</bookstore>

 

获取所有title:

/bookstore/book/title

 

获取第一个book的title:

/bookstore/book[1]/title

 

选取所有的价格(旨在选取price节点中的所有文本):

/bookstore/book/price/text()

 

选取价格高于10的price节点、title节点:

/bookstore/book[price > 10.0]/price

/bookstore/book[price > 10.0]/title

 


 

七、XPath总结

 

XPath是我们了解如何在XML中查找信息;

 

学习了XPath,还可以继续学习XSLT、XQuery、XLink以及XPointer;

鉴于这些和我们学习的Selenium WebDriver无太大关系,这里只做简单说明;

 

XSLT:针对XML文件的样式表语言;

XQuery:和XML数据查询有关;

XLink和XPointer:XML中的链接表示;

 


 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“定点打击”——XPath 使用细则(Just For Selenium WebDriver) 的相关文章

随机推荐

  • 2021年浙大考研计算机专业录取分数线,浙江大学2021年计算机考研拟录取数据分析...

    导语 中公浙江研招网提醒大家关注浙江专业解析 浙江大学2021年计算机考研拟录取数据分析 浙江大学计算机科学与技术399分的分数线堪称恐怖 这仅仅是进入复试的条件 复试录取比一般要求不低于1 2 1 也就是说 必然会有400分以上的高分考生
  • C++入门day07(通讯录)

    C 语句真的好长啊 Python确实更简洁 老师带着我们理解逻辑 所以用的是面条版 通讯录管理系统 系统需求 通讯录是一个可以记录亲人 好友信息的工具 系统中需要实现的功能如下 添加联系人 向通讯录中添加新人 信息包括 姓名 性别 年龄 联
  • feign.RetryableException:&& unknowhostException

    在使用springcloud的时候 服务的调用通过eureka来保存 通过feign来进行微服务的远程调用 在远程调用ribbon的时候 出现两种异常 一种是timeout异常 需要在配置中加上ribbon ReadTimeout 6000
  • windows10和win11设置暂停更新-时间任意设置

    windows10设置暂停更新时间任意设置 亲测有效 1 修改注册表 2 设置时间参数 2 1 设置路由 2 2 设置参数 2 3 设置后效果 1 修改注册表 找到Windows 管理工具 点击向下可找到注册表编辑器 点击打开 打开 运行
  • uni-app h5 uploadFile多文件/图片上传

    问题描述 在使用uni app开发h5时要实现多图片上传给后台 不使用循环 发现给后台的格式有误 后台取不到数据 需改变下传递的数据格式 uni chooseImage sourceType sourceType this sourceTy
  • idea新建一个Spring项目(最基础)

    首先 笼统介绍一下 什么是spring 1 Spring 的主要作用就是为代码 解耦 降低代码间的耦合度 根据功能的不同 可以将一个系统中的代码分为主业务逻辑与系统级业务逻辑两类 它们各自具有鲜明的特点 主业务代码间逻辑联系紧密 有具体的专
  • 【MAVEN】Maven依赖和项目代码分离打包,依赖包自动同步到服务器

    Maven分离lib打包 lib包自动同步 加速项目部署 目标 整体步骤 Maven配置 1 分离打包 配置打包 将依赖jar拷贝到外部 2 编辑MANIFEST MF 本地 lt gt 服务器lib快速同步 1 使用前提 2 实现同步 目
  • R语言 编写自定义函数

    自定义函数 R语言实际上是函数的集合 用户可以使用base stats等包中的基本函数 也可以编写自定义函数完成一定的功能 一个函数的结构大致如下所示 myfunction lt function arglist statements re
  • 网络数据保障ptop_网络影响未来十大预言

    2007年1月23日 CNNIC发布了第19次互联网报告 报告数据显示 中国的互联网正在很多方面发生改变 2007年这一趋势将变得更加明显 1 网络越来越实用 56 1 的用户上网经常收发邮件 上网看新闻第一次退居次席 估计不远的将来 写信
  • 【邻接表】69 邻接表:构造有权图

    问题描述 目的 使用C 模板设计并逐步完善图的邻接表抽象数据类型 ADT 内容 1 请参照图的邻接矩阵模板类原型 设计并逐步完善图的邻接表ADT 由于该环境目前仅支持单文件的编译 故将所有内容都集中在一个源文件内 在实际的设计中 推荐将抽象
  • JVM 虚拟机

    JDK1 2 Exact VM虚拟机优化 能够准确的判断内存中数时执行内存引用还是整数值 从而减少了句柄的中间开销 提高了熟读 Exact VM因它使用准确式内存管理 Exact Memory Management 也可以叫Non Cons
  • 内连接、外连接、左连接、右连接

    连接是使用一定条件将两个表合在在一起的操作 包括内连接 inner join 和外连接 outer join 1 内连接 等值连接 两个表中都满足相关条件的记录才被选择出来 2 外连接包括左外连接 左连接 left join 和右外连接 右
  • 美国一桶牛奶多少钱?

    你好 我是郭震 zhenguo 最近 关注我的朋友中有几位 想叫我多分享下美国的生活 今天我就从一个很小的生活点入手 牛奶 开始 牛奶在美国超市一般都是下面的这种大桶 比如Costco超市里 一般提供以下两种 口感有些不同 但是价格很相似
  • JAVA学习经验谈

    本文是我自2002年9月开始JAVA学习以来的一点经验之谈 首先我不是有丰富编程经验的程序员 所以本文不对JAVA的具体语法 编程技巧和设计模式做过多的论述 仅从个人的学习角度谈感受 由于有大学期间的C语言学习经历我对JAVA的基本语法相对
  • The Difference between Probability and Statistic

    本科数学专业 现在在PKU学习计算机 当前主要的focus是DNN RNN in Action Recognition 心中总有一股数学情结 OOAD 课程上老师提及这个问题 所以信誓旦旦地想写一篇博客 可惜最后发现雷声大 雨点小 先mar
  • 使用IDEA 对springboot项目进行打war包

    网上很多版本 以下是本人新建springboot项目后本地测试通过 好了上步骤 1首先这个地方需要配置
  • 多媒体讲解器基本型设计

    多媒体讲解器功能按照播放器功能和灯光控制功能分类 播放功能分类 简易型 具备按键操作功能 TF卡升级 在线播放 U盘升级 在线播放 具备人体接近检测功能 红外 雷达 自动播放讲解功能 自动停止讲解功能 自动播放音乐 自动切换到讲解功能 切换
  • Dart 断言(assert)和异常

    一 断言 assert 断言的作用是 如果表达式的求值结果不满足需要 则打断代码的执行 可以要将提示消息附加到断言 添加一个字符串作为第二个参数 实例 void main String urlString http www baidu co
  • Winsock状态说明及错误代码

    Winsock状态参数说明 常数 值 描述 sckClosed 0 缺省值 关闭 SckOpen 1 打开 SckListening 2 侦听 sckConnectionPending 3 连接挂起 sckResolvingHost 4 识
  • “定点打击”——XPath 使用细则(Just For Selenium WebDriver)

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 Selenium WebDriver中有关元素定位的学习 需要XPath的支持 特此梳理 前言 XPath教程 XPath是一门在XML文档中查找信息的语言 XPat