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

XPath 语法入门

XPath 语法入门

什么是 XPath?

XPath(XML Path Language) 是一种用于在 XML 文档中定位节点的语言。它可以用来选择 XML 文档中的元素、属性、文本内容等。此外,XPath 还支持通过条件筛选节点,并且可以结合函数和运算符进行复杂的查询操作。

虽然 XPath 最初是为处理 XML 设计的,但它也被广泛应用于 HTML 文档(如在 Selenium 中用于定位网页元素)。掌握 XPath 的基本语法,能够帮助你高效地提取数据或操作文档。


XPath 的核心概念

1. 节点选择

XPath 可以选择 XML 或 HTML 文档中的节点。常见的节点类型包括:

  • 元素节点:如 <book><title>
  • 属性节点:如 <book id="123"> 中的 id 属性。
  • 文本节点:如 <title>XML Tutorial</title> 中的 XML Tutorial

2. 轴(Axis)

轴用于指定节点的选择范围。常见的轴包括:

  • child:::选择当前节点的所有子节点。
  • parent:::选择当前节点的父节点。
  • descendant:::选择当前节点的所有后代节点。
  • self:::选择当前节点本身。

3. 谓词(Predicate)

谓词用于筛选符合条件的节点。它使用方括号 [] 包裹,并可以包含条件表达式。

4. 通配符和函数

XPath 提供了多种通配符(如 * 表示任意元素)和内置函数(如 contains()text() 等),用于增强查询能力。


XPath 的基本语法

1. 选择元素节点

使用元素名称直接选择节点:

/books/book
  • 上述表达式表示从根节点 /books 下选择所有 <book> 元素。
示例 XML 文档:
<books><book id="1"><title>XML Tutorial</title><price>50.00</price></book><book id="2"><title>HTML Guide</title><price>30.00</price></book>
</books>
示例:选择所有 <book> 元素
/books/book

结果会返回文档中所有的 <book> 节点。


2. 使用轴

默认情况下,XPath 使用 child:: 轴选择子节点。以下是一些常见的轴示例:

示例:使用 parent::
/books/book/parent::
  • 上述表达式返回 <book> 元素的父节点(即 <books>)。
示例:使用 descendant::
/books/descendant::price
  • 返回 <books> 下所有后代节点中的 <price> 元素。

3. 谓词筛选

谓词用于根据条件筛选节点。常见的谓词包括:

  • 筛选特定的元素(如 position())。
  • 使用比较运算符(=, >, <, >=, <=)。
  • 使用逻辑运算符(and, or)。
示例:筛选价格大于 40 的书籍
/books/book[price > 40]
  • 返回所有 <book> 元素中,子元素 <price> 的值大于 40 的节点。
示例:使用 position() 筛选第一个 <book>
/books/book[position() = 1]
  • 返回第一个 <book> 节点。

4. 属性选择

要选择某个元素的属性,可以使用 @ 符号:

/books/book/@id
  • 上述表达式返回所有 <book> 元素的 id 属性值。
示例:筛选 id 为 1 的书籍
/books/book[@id = '1']

5. 文本内容选择

要提取某个元素的文本内容,可以使用 text() 函数:

/books/book/title/text()
  • 上述表达式返回所有 <title> 元素中的文本内容。
示例:筛选标题包含 “XML” 的书籍
/books/book[title[contains(text(), 'XML')]]

6. 通配符和函数

XPath 提供了多种通配符和内置函数,用于增强查询能力。

常见的通配符:
  • *:匹配任意元素。
  • @*:匹配任意属性。
示例:选择所有 <book> 的子节点
/books/book/*
常见的函数:
  • contains():判断文本是否包含某个子串。
  • starts-with():判断文本是否以某个字符串开头。
  • concat():拼接字符串。
  • position():返回当前节点的位置。

XPath 的应用场景

1. 数据提取

XPath 常用于从 XML 或 HTML 文档中提取数据。例如:

//table/tr/td[2]
  • 上述表达式可以用于提取网页表格中的第二列数据。

2. 自动化测试(如 Selenium)

在自动化测试中,XPath 可以用来定位网页元素。例如:

//*[@id='login-button']
  • 上述表达式定位 id 属性为 login-button 的按钮。

3. XML 文档处理

XPath 是处理 XML 文档的首选语言之一。例如:

/books/book[price > 40]
  • 上述表达式筛选价格大于 40 的书籍。

常见问题与技巧

1. 如何处理重复节点?

如果需要选择某个特定的节点,可以使用 position() 函数。例如:

/books/book[position() = 2]

2. 如何忽略大小写?

XPath 不区分大小写,默认情况下会将文本按原样匹配。可以通过转换函数(如 lower-case())处理。

示例:不区分大小写的筛选
//title[contains(lower-case(text()), 'xml')]

3. 如何避免过度具体化?

编写 XPath 表达式时,尽量保持简洁,避免过度依赖路径。例如:

//*[contains(@id, 'login')]
  • 上述表达式选择任意 id 属性中包含 login 的元素。

总结

通过本文的学习,你应该掌握了 XPath 的基本语法和核心概念,包括节点选择、轴、谓词、属性选择以及函数的使用。这些知识将帮助你高效地处理 XML 文档或提取网页数据。如果你希望进一步深入学习,可以尝试结合实际项目进行练习,例如在自动化测试中编写更复杂的 XPath 表达式。


参考资料

  • XPath Tutorial
  • Selenium with XPath
http://www.xdnf.cn/news/1114.html

相关文章:

  • day35图像处理OpenCV
  • docker镜像新增加用户+sudo权限,无dockerfile
  • osxcross 搭建 macOS 交叉编译环境
  • LangChain4j 搭配 Kotlin:以协程、流式交互赋能语言模型开发
  • [特殊字符]【Qt自定义控件】创意开关按钮 - 丝滑动画+自定义样式+信号交互 | 附完整源码
  • 人工智能在PET-CT中的应用方向探析
  • 环境变量(Linux)
  • SparkStreaming概述
  • C# MP3 伴奏
  • MYSQL之库的操作
  • C++设计模式
  • Sharding-JDBC 系列专题 - 第七篇:Spring Boot 集成与 Sharding-Proxy 简介
  • MongoDB常用命令
  • 01-STM32基本知识点和keil5的安装
  • 【白雪讲堂】[特殊字符]内容战略地图|GEO优化框架下的内容全景布局
  • 7N60-ASEMI无人机专用功率器件7N60
  • Elasticsearch 使用reindex进行数据同步或索引重构
  • spark jar依赖顺序
  • Docker--Docker网络原理
  • docker容器中uv的使用
  • ARM汇编的LDM和STM指令
  • 【sylar-webserver】重构 增加内存池
  • weibo_har鸿蒙微博分享,单例二次封装,鸿蒙微博,微博登录
  • 基于 WebRTC + Pion + HeyGem.ai 实现可互动的数字人系统
  • 安徽京准:关于石油管道监控NTP时间同步服务器方案
  • kafka auto.offset.reset详解
  • 【Qt】QDialog类
  • WebRTC服务器Coturn服务器的管理平台功能
  • 最新扣子(Coze)案例教程:飞书多维表格按条件筛选记录 + 读取分页Coze工作流,无限循环使用方法,手把手教学,完全免费教程
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之显示勾选的购物车数据和创建订单