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

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

相关文章:

  • Vue 实例 VM 访问属性
  • 不可变数据:基于持久化数据结构的状态管理
  • 初级云计算运维工程师学习二
  • 110. 平衡二叉树
  • MYSQL—两阶段提交
  • 影刀RPA怎么和AI结合,制作自动采集小红书爆款文章+自动用AI改写标题、内容+用AI文生图生成发文图片+自动在小红书上发布文章
  • 【NLP】This Post Is All You Need阅读笔记
  • 【数字图像处理】立体视觉信息提取
  • Relay IR的核心数据结构
  • Docker 与 Docker-Compose 的区别
  • leetcode day36 01背包问题 494
  • 08_Docker Portainer可视化管理
  • 【Linux】47.高级IO(1)
  • SQLiteDatabase 增删改查(CRUD)详细操作
  • Java函数生成实际应用案例:数据处理流水线
  • # 基于PyTorch的食品图像分类系统:从训练到部署全流程指南
  • 基于javaweb的SpringBoot校园失物招领系统设计与实现(源码+文档+部署讲解)
  • 鸿蒙NEXT开发权限工具类(申请授权相关)(ArkTs)
  • Python-27:游戏英雄升级潜力评估
  • 【TeamFlow】4.3.1 SI单位系统库(Units)
  • 首映|国家自博馆4D电影《海洋深深》:潜入深海向地球发问
  • 上海之旅相册②俄罗斯Chaika:客居六年,致上海的情书
  • 日本乒乓名将丹羽孝希因赌博被禁赛6个月,曾获奥运男团银牌
  • 第13届京都国际摄影节,14位艺术家展现东西方视角:人性
  • 上海崇明“人鸟争食”何解?检察机关推动各方寻找最优解
  • 人民日报:当阅读成为“刚需”