当前位置: 首页 > news >正文

常用的xpath


一、xpath 语法

简单看一下菜鸟教程即可

1、基本语法

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取(取子节点)。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。
.选取当前节点。
选取当前节点的父节点。
@选取属性。

2、基本语法-谓语(Predicates)

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

谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=‘eng’]选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。



☺ 二、项目xpath 的常用场景

1、多个相同标签的选择

(1) contains ()方法:包含某个内容的标签

--举例1:
xpath("//div[@class='row']/div[contains(@class, 'search-results')]")
xpath("//p//strong[contains(text(), "Release date")]")
  • 举例2:

(2) 通过节点序号获取到第几个子节点

--举例1:
xpath("//div[@class='result'][1]/h1/a/text()")
  • 举例2:

(3) following-sibling:: 获取同级的标签

--举例1:
xpath("//p//strong[contains(text(), "Release date")]//following-sibling::i[1]")
  • 举例2:

我们公司的项目,引入的xpath的依赖的那个版本,它对xpath的解析,和谷歌浏览器看到有点不同,比如这个following-sibling::a,谷歌会取到所有a标签,但是项目中,只取第一个a标签。


2、项目中常用的方法、谓语

text() 取到文本内容

@属性 比如 @class、@href @title

following-sibling 获取同级元素

contains方法 对多个相同元素进行判断后选择

node() 获取所有节点

count方法 计算数量

postion方法 判断位置

  • 举例:
xpath2("//p//strong[contains(text(), "Genre:")]//following-sibling::a[position()<(count(//p//strong[contains(text(), "Genre:")]//following-sibling::node())-count(//p//strong[contains(text(), "Genre:")]//following-sibling::br[1]//following-sibling::node()))*0.5]")

如果xpath 使用报错,就使用xpath2,公司项目中引入了xpath2的依赖


3、xpath 字符串相关函数

和java的String的一些函数差不多!

举例拼接字符串 concat方法

xpath("//div[@class='row']/div[@class='search-results']/div[@class='result'][1]/h1/a/text()")xpath2("concat('本周Steam值得关注的游戏',//div[@class='row']/div[contains(@class, 'search-results')]/div[@class='result'][1]/h1/a/text())")

判断是否存在字符串 contains方法



三、写xpath 常用的工具—谷歌浏览器

示例:




如果本文对你有帮助的话记得给一乐点个赞哦,感谢!

http://www.lryc.cn/news/23155.html

相关文章:

  • 【035】基于java的进销库存管理系统(Vue+Springboot+Mysql)前后端分离项目,附万字课设论文
  • 【Spark分布式内存计算框架——Spark Streaming】7. Kafka集成方式
  • 如何引入elementUI
  • vue3+rust个人博客建站日记4-Vditor搞定MarkDown
  • KDZD-JC软化击穿试验仪
  • 【数据结构】单链表的C语言实现--万字详解介绍
  • 电子科技大学软件工程期末复习笔记(七):测试策略
  • 逆向-还原代码之除法 (Interl 64)
  • Python WebDriver自动化测试
  • 2023年微信小程序获取手机号授权登录注册详细教程,包含服务端教程
  • YOLOv8模型学习笔记
  • Java SE知识点1
  • 华为OD机试模拟题 用 C++ 实现 - 端口合并(2023.Q1)
  • C++ Primer Plus 第6版 读书笔记(3) 第3章 处理数据
  • ArrayList源码解读
  • python实战应用讲解-【语法高级篇】时间与日期(附python示例代码)
  • D. Moscow Gorillas(双指针 + 区间分析)
  • 华为OD机试题,用 Java 解【相同数字的积木游戏 1】问题
  • Python实现GWO智能灰狼优化算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战
  • 无线蓝牙耳机哪个牌子好?2023质量好的无线蓝牙耳机推荐
  • Qt之QTableView自定义排序/过滤(QSortFilterProxyModel实现,含源码+注释)
  • 电商(强一致性系统)的场景设计
  • 算法与数据结构(一)
  • 【Python】元组如何创建?
  • qt操作文件以及字符串转换
  • 数组中只出现一次的两个数字(异或法思路)
  • python支持的操作系统有哪些
  • S3C2440开发环境搭建
  • 软件测试之测试用例
  • null和undefined的区别有哪些?