XPath入门

news2024/10/5 14:13:37

好久没用XPath了(之前没做笔记),最近要用的时候又到处查。。。(痛苦.jpg),还是记录下吧(π_π)

XPath,是XML Path Language的缩写, 是一门在 XML 文档中查找信息的语言。当然,XPath同样适用了HTML(可以将HTML的标签看作是XML中的一个节点)。

关于XPath的术语,可以从菜鸟教程的 XPath 节点 进行了解。

XPath优缺点:XPath可用的范围比较广,比如selenium、appium库都支持XPath,但其定位元素(即标签或者节点)是从头到尾的遍历,所以速度较慢。

节点定位

XPath提供了多种用于定位节点的方法。
本文推荐使用的XPath解析工具:XPath解析器

根据标签

表达式如下:

表达式描述
/从根节点选取(即只取匹配的子节点)
//从当前节点的以下节点中选取(即取匹配的子节点和所有匹配的每一代孙节点)
.选取当前节点
..选取当前节点的父节点
@选取属性匹配的节点

具体示例:
xml文件内容如下:

<bookstore>
    <book>
      <title lang="fun">Harry Potter</title>
      <price>29.99</price>
    </book>

    <book>
      <title lang="study">Learning XML</title>
      <price>39.95</price>
    </book>

    <book>
      <title lang="study">Python简明教程</title>
      <price>18</price>
    </book>
</bookstore>

则相关表达式及其结果如下:

表达式结果说明
/bookstore选取根元素 bookstore,即/bookstore表示bookstore标签内的所有内容
/bookstore/book选取属于 bookstore 的子元素的所有 book 元素,示例中bookstore标签下共有3个book标签,即该表达式会匹配到3个元素
//title选取所有title子元素。即只要标签是title就匹配,不管该title在哪些位置
/bookstore//title选取bookstore标签内的所有title子元素,即只在bookstore标签内选取
//@lang选取所有lang属性的值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条件设置

在一个页面中,常用的标签就那么多,所以会导致不同元素的标签定位是一样的,单纯使用标签的方式会匹配出多个元素,我们可以对标签设置条件,匹配出指定的元素。
对指定标签设置条件的格式:[条件]
常用的条件方法:

条件说明
[数字]匹配到多个的时候,数字表示取第几个(从1开始)
[last()]取最后一个匹配到的元素,[last()-1]表示取倒数第二个匹配到的元素
position()表示匹配到的元素的下标,[position()<=2]表示选取前2个匹配到的元素
[@xxx]选取包含xxx属性的元素内容
[@var=‘val’]选取拥有var属性,且var属性值为val的元素
[var>num]选取包含了var标签,且var标签内容大于num的元素
[contains(var, ‘str’)]匹配节点中包含var内容,且var的值包含字符串str的元素,var可以是属性(格式:@属性名)或节点文本(text())
/text()表示获取匹配的元素的文本内容,比如<h2>xxx</h2>中,/h2/text()获取到的是xxx
start-with(var, ‘str’)匹配节点中var(可以是属性或标签文本内容)是str开头的元素
ends-with()匹配节点中var(可以是属性或标签文本内容)是str结尾的元素

相关示例如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通配符

有时候我们要匹配到一个节点下所有子节点,但是该节点下的子节点的标签并不是一致的,这个时候我们可以使用通配符进行操作

条件说明
*匹配任何节点,返回节点的内容(即标签文本)
[@*]匹配带属性的节点

在这里插入图片描述
在这里插入图片描述

运算符

XPath提供了运算符来进行

运算符描述实例
|统计两个节点的并集//book | //cd返回所有拥有 book 和 cd 元素的节点并集
+加法6 + 4,结果为10
-减法6 - 4,结果为2
*乘法6 * 4,结果为24
div除法8 div 4,结果为2
mod计算除法的余数5 mod 2
=等于price=9.80,选取price标签内的值为9.8的元素
!=不等于price!=9.80,选取price标签内的值不为9.8的元素
<小于price<9.80,选取price标签内的值小于9.8的元素
<=小于或等于price<=9.80,选取price标签内的值小于或等于9.8的元素
>大于price>9.80,选取price标签内的值大于9.8的元素
>=大于或等于price>=9.80,选取price标签内的值大于或等于9.8的元素
orprice=9.80 or price=9.70,选取price标签内的值为9.8或9.7的元素
andprice>9.00 and price<9.90,选取price标签内的值在9和9.9之间的元素

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

工具推荐

每个浏览器的开发者模式都提供了XPath的使用,这里介绍下Chrome浏览器的XPath内置应用,方便后续我们的学习。

  1. 打开Chrome浏览器,打开网页,按键F12打开开发者模式
    在这里插入图片描述
  2. 在Elements下,按键Ctrl+F键,即可在搜索框中数据XPath表达式来定位相关元素在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】POSIX信号量

目录&#x1f308;前言&#x1f338;1、POSIX信号量&#x1f368;1.1、概念&#x1f367;1.2、PV操作&#x1f33a;2、POSIX信号量相关API&#x1f368;2.1、初始化和销毁信号量&#x1f367;2.2、等待信号量&#xff08;P&#xff09;&#x1f370;2.3、发布信号量&#xff08…

ImmutableList hessian2序列化失败问题分析

问题描述 A服务提供了个RPC接口给B服务使用&#xff0c;入参里有个参数是List类型&#xff0c;B服务在传参时使用Guava里的 ImmutableList&#xff0c;结果发生报错。 其中&#xff0c;B服务即consumer端的异常为&#xff1a;「com.alibaba.dubbo.remoting.RemotingException:…

AD采集之离散化概念(Quantizer模型使用介绍)

模拟量采集的PLC程序和功能块算法,可以参看下面的文章链接: PLC模拟量采集算法数学基础(线性传感器)_RXXW_Dor的博客-CSDN博客_模拟量采集线性校准模拟量采集库如何设计,具体算法代码请参看我的另一篇博文:PLC模拟量输入 模拟量转换FC:S_ITR_RXXW_BOSS的博客-CSDN博客_…

缓存数据库memcached

目录 一.memcached简介 memcached简介 memcached的特点 二.memcached安装 2.1.yum安装 2.2.源码安装 三.memcached命令 3.1.memcached的特征 3.2.memcached的set命令 3.3.memcached的get命令 四.memcached应用实例配置 4.1.图示 4.2.基础配置 4.3.环境规划 4.3.1…

SpringBoot程序的打包和运行

程序打包 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做package。本操作可以在Idea环境下执行。 mvn package​ 打包后会产生一个与工程名类似的jar文件&#xff0c;其名称是由模块名版本号.jar组成的。 程序运行 ​ 程序包打好以…

TeeGrid for .NET 2023

TeeGrid for .NET 2023 TeeGrid for.NET为Visual Studio项目提供了一个非常快速的数据网格。打包功能的.NET数据网格提供了诸如排序、分组或过滤网格数据、可调整列大小、主详细视图、可拖动选择、网格滚动等功能。只需使用几个属性设置即可启用这些内置功能。TeeGrid可以链接到…

【一文看懂 Redis 核心】 基础数据结构 架构设计 存储 集群

基础数据结构 & 架构设计 & 存储 & 集群 redis 简单来说其实就是一个基于内存的 key - value 数据库&#xff0c;它本身结构的前提就是 key - value 类似于 Java 中的 HashMap &#xff0c;所以我们在聊 redis 的时候始终要记得这个前提&#xff0c;同时 redis 在…

【SpringCloud】Feign 和 OpenFeign 两者的异同点

Feign 和 OpenFeign 两者共同点Feign和OpenFeign作用一样&#xff0c;都是进行远程调用的组件。里面都内置了 Ribbon。都是加在消费端的注解&#xff0c;让消费端可以调用其他生产者的服务。Feign 和 OpenFeign 两者区别&#xff08;1&#xff09;依赖不同Feign 的依赖<!-- …

十九、Gtk4-Ui file for menu and action entries

Ui file for menu 你可能认为构建菜单真的很麻烦。是的&#xff0c;程序很复杂&#xff0c;需要很多时间来编码。这种情况类似于构建小构建。当我们构建部件时&#xff0c;使用ui文件是避免这种复杂性的好方法。菜单也是如此。 菜单的ui文件有界面和菜单标签。文件以interfac…

JavaScript 基本认识

JavaScript 简介 JavaScript 是什么&#xff1f; JavaScript 是互联网最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 Web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是脚本语言&#xff1f; HTML 是超文本标记语言&am…

Groovy实现热部署

Groovy实现热部署一、概述二、准备工作2.1 规则接口IRule三、非Spring环境Groovy文件方式3.1 Groovy文件3.2 读取并生成实例3.3 使用这个实现四、数据库Groovy脚本方式4.1 Groovy脚本4.2 读取并生成实例五、Spring中使用Groovy的方式5.1 Groovy文件5.2 读取并生成实例5.3 使用这…

css sprite雪碧图制作,使用以及相关,图文gif

写在前面&#xff1a; 在网页制作中&#xff0c;雪碧图也是前端攻城狮必须掌握的一项小技能。百度词条对雪碧图的解释是&#xff1a;CSS雪碧 即CSS Sprite&#xff0c;也有人叫它CSS精灵&#xff0c;是一种CSS图像合并技术&#xff0c;该方法是将小图标和背景图像合并到一张图…

计算机组成原理 | 第一章:概论 | 冯诺依曼计算机 | 计算机硬件

文章目录&#x1f4da;冯诺依曼计算机的特点&#x1f4da;计算机硬件组成框图&#x1f4da;计算机硬件的主要技术指标&#x1f407;非时间指标&#x1f407;时间指标&#x1f511;计算技巧归纳&#x1f4da;小结&#x1f511;本章掌握要点&#x1f407;补充思考题&#x1f4da;…

[电商实时数仓] 用户行为数据和业务数据采集以及ODS层

文章目录1.数据仓库环境准备1.1 导入依赖1.2 创建相关包2.数据仓库运行环境2.1 Hbase环境2.2 模拟数据3.数仓开发之ODS层3.1 mysql配置修改3.2 FlinkCDC的程序3.3 结果检测1.数据仓库环境准备 1.1 导入依赖 <properties><java.version>1.8</java.version>&l…

为什么你的Facebook广告策略应该包括SEO

最近在看了很多关于 SEO的文章&#xff0c;今天想跟大家分享一些我个人关于 Facebook广告中的 SEO策略&#xff0c;以及它为什么是必要的。虽然在我看来&#xff0c;所有营销手段都需要结合 SEO才能发挥最大作用&#xff0c;但这并不意味着要完全放弃 SEO。如果你对以下问题感兴…

分享147个ASP源码,总有一款适合您

ASP源码 分享147个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 147个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1us1KTsxeaZlosHsqvrkC5Q?pwd81pl 提取码&#x…

Leetcode:51. N 皇后(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 回溯&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&a…

数字电位器程控可调电阻ic

一、前言 数字电位器又叫可编程电阻器&#xff0c;是一种替代传统机械电位器的新型CMOS数字、模拟混合信号处理集成电路&#xff0c;不需要搭建复杂的电路环境即可简单的通过CPU数字通讯实现电路调节&#xff0c;数字电位器也不能完全替代传统的机械电位器&#xff0c;在很多场…

Sentinel(限流、熔断、降级)、SpringBoot整合Sentinel、Sentinel的使用-60

一&#xff1a;Sentinel简介 Sentinel就是分布式系统的流量防卫兵 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 1.1 官方文档 官方文档&#…

基于OpenXR,Collabora推开源VI-SLAM AR/VR定位系统

XR最关键的难题之一就是定位&#xff0c;为了定位XR头显在现实世界中的位置和角度&#xff0c;厂商们采用了多种方案&#xff0c;比如机械传感器、惯性传感器、磁传感器、声学传感器等等。这些定位方式有一个共同的问题&#xff0c;那就是传感器不够完善&#xff0c;且会产生噪…