6.3.1 软件->W3C XPath 1.0 标准(W3C Recommendation):XPath(XML Path Language)查询语言

一、XPath 核心定义

XPath 是专门为在 XML 文档中快速定位、选取节点(元素 / 属性 / 文本)设计的查询语言,你可以把它理解成:

  • XML 版的 "文件路径":像你在电脑里用C:\文档\书籍\Python.pdf找到文件一样,XPath 用路径表达式定位 XML 中的某个节点
  • XML 版的 "数据库查询语句(SQL)":能精准筛选出符合条件的节点(比如 "价格大于 100 的书籍")

它是解析 XML 的核心工具,几乎所有 XML 解析库(Python 的 lxml、Java 的 XPathAPI)都支持 XPath,比单纯遍历 XML 节点效率高得多

二、XPath 核心概念:节点类型

在 XPath 中,XML 的每一部分都是 "节点",核心节点类型:

节点类型 示例(对应之前的 books.xml) 说明
元素节点 <book><title><library> XML 的标签,是最核心的节点
属性节点 id="1" 元素的属性(带@标识)
文本节点 Python编程:从入门到实践 元素内的文本内容
根节点 / 代表整个 XML 文档的根(不是<library><library>是根元素)

三、XPath 基础语法(核心路径表达式)

以之前的books.xml为例,先回顾文档结构:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<library>  <!-- 根元素 -->
    <book id="1">
        <title>Python编程:从入门到实践</title>
        <author>埃里克·马瑟斯</author>
        <price>89.00</price>
    </book>
    <book id="2">
        <title>Java核心技术</title>
        <author>凯·霍斯特曼</author>
        <price>129.00</price>
    </book>
</library>

1. 基础路径(定位节点)

表达式 含义 示例(定位目标)
/ 从根节点开始(绝对路径) /library → 定位根元素<library>
// 从任意位置匹配节点(相对路径) //book → 定位所有<book>元素(不管层级)
. 当前节点 //book/. → 等同于//book
.. 父节点 //title/.. → 定位所有<title>的父节点(即<book>
@ 选取属性 //book/@id → 定位所有<book>id属性

2. 筛选条件(谓语,用[]

可以给路径加条件,精准筛选节点:

表达式 含义 示例结果
//book[1] 第一个<book> id=1 的 book
//book[last()] 最后一个<book> id=2 的 book
//book[position()<2] 位置小于 2 的 book id=1 的 book
//book[price>100] 价格 > 100 的 book id=2 的 book
//book[@id='2'] id 属性为 2 的 book id=2 的 book

3. 通配符(匹配任意节点)

通配符 含义 示例
* 任意元素节点 /library/* → 定位<library>下所有子元素(即所有 book)
@* 任意属性节点 //book/@* → 定位所有 book 的所有属性(即所有 id)
node() 任意类型节点 //book/node() → 定位 book 下所有节点(title/author/price)

4. 多路径匹配(用|

可以同时选取多个路径的节点:

xpath 复制代码
//title | //price  # 定位所有<title>和<price>节点

四、实战示例(Python + lxml 解析 XML + XPath)

XPath 需要配合解析库使用,Python 中lxml库对 XPath 支持最好(需先安装):

安装依赖

bash 复制代码
pip install lxml

完整代码

python 复制代码
from lxml import etree

# 1. 加载XML文件(或字符串)
xml_str = """
<?xml version="1.0" encoding="UTF-8"?>
<library>
    <book id="1">
        <title>Python编程:从入门到实践</title>
        <author>埃里克·马瑟斯</author>
        <price>89.00</price>
    </book>
    <book id="2">
        <title>Java核心技术</title>
        <author>凯·霍斯特曼</author>
        <price>129.00</price>
    </book>
</library>
"""
# 解析XML
tree = etree.fromstring(xml_str)

# 2. 用XPath定位节点(核心操作)
# 示例1:获取所有book的id属性
book_ids = tree.xpath("//book/@id")
print("所有book的id:", book_ids)  # 输出:['1', '2']

# 示例2:获取价格>100的book的标题
high_price_books = tree.xpath("//book[price>100]/title/text()")
print("价格>100的书籍标题:", high_price_books)  # 输出:['Java核心技术']

# 示例3:获取第二个book的作者
second_book_author = tree.xpath("//book[2]/author/text()")
print("第二个book的作者:", second_book_author)  # 输出:['凯·霍斯特曼']

# 示例4:获取所有title和price的文本
titles_and_prices = tree.xpath("//title/text() | //price/text()")
print("所有标题和价格:", titles_and_prices)
# 输出:['Python编程:从入门到实践', '89.00', 'Java核心技术', '129.00']

五、XPath 的使用场景

  1. XML 解析:快速提取 XML 中指定条件的数据(替代繁琐的遍历)
  2. 网页爬虫:XPath 是解析 HTML(HTML 本质是不严格的 XML)的核心工具,能精准定位网页中的元素(比如爬取商品标题、价格)
  3. 配置文件处理:快速修改 / 读取 XML 配置文件中的特定节点

总结

  1. XPath 是 XML 的路径查询语言,核心作用是快速定位 / 筛选 XML 中的元素、属性、文本节点,比手动遍历效率高
  2. XPath 的核心语法包括:/(绝对路径)、//(任意路径)、@(属性)、[](条件筛选)、|(多路径)
  3. 实际开发中,XPath 常配合解析库(如 Python 的 lxml)使用,是处理 XML/HTML 数据的必备技能
相关推荐
2401_851272993 小时前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python
快乐柠檬不快乐3 小时前
Java连接电科金仓数据库(KingbaseES)实战指南
java·开发语言·数据库
AllData公司负责人3 小时前
AllData数据中台通过集成DolphinScheduler+Seatunnel实现SAP HANA数据库同步到Doris数据仓库
数据库·数据仓库·sap hana
2401_846341653 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
执笔画情ora4 小时前
Postgresql管理-杀会话还是取消会话?
数据库·oracle
清风徐来QCQ4 小时前
redis 面试可能会问的问题
数据库·redis·面试
这辈子谁会真的心疼你4 小时前
如何修改照片定位信息?详细介绍两个方法
数据库
Oueii4 小时前
构建一个基于命令行的待办事项应用
jvm·数据库·python
小瓦码J码4 小时前
PostgreSQL pg_stat_statements 性能分析利器(二)全表扫描导致物理IO爆炸
数据库·postgresql