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

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、libraryXML 的标签是最核心的节点属性节点id1元素的属性带标识文本节点Python编程从入门到实践元素内的文本内容根节点/代表整个 XML 文档的根不是librarylibrary是根元素三、XPath 基础语法核心路径表达式以之前的books.xml为例先回顾文档结构?xml version1.0 encodingUTF-8?library!-- 根元素 --bookid1titlePython编程从入门到实践/titleauthor埃里克·马瑟斯/authorprice89.00/price/bookbookid2titleJava核心技术/titleauthor凯·霍斯特曼/authorprice129.00/price/book/library1. 基础路径定位节点表达式含义示例定位目标/从根节点开始绝对路径/library→ 定位根元素library//从任意位置匹配节点相对路径//book→ 定位所有book元素不管层级.当前节点//book/.→ 等同于//book..父节点//title/..→ 定位所有title的父节点即book选取属性//book/id→ 定位所有book的id属性2. 筛选条件谓语用[]可以给路径加条件精准筛选节点表达式含义示例结果//book[1]第一个bookid1 的 book//book[last()]最后一个bookid2 的 book//book[position()2]位置小于 2 的 bookid1 的 book//book[price100]价格 100 的 bookid2 的 book//book[id2]id 属性为 2 的 bookid2 的 book3. 通配符匹配任意节点通配符含义示例*任意元素节点/library/*→ 定位library下所有子元素即所有 book*任意属性节点//book/*→ 定位所有 book 的所有属性即所有 idnode()任意类型节点//book/node()→ 定位 book 下所有节点title/author/price4. 多路径匹配用|可以同时选取多个路径的节点//title | //price # 定位所有title和price节点四、实战示例Python lxml 解析 XML XPathXPath 需要配合解析库使用Python 中lxml库对 XPath 支持最好需先安装安装依赖pipinstalllxml完整代码fromlxmlimportetree# 1. 加载XML文件或字符串xml_str ?xml version1.0 encodingUTF-8? library book id1 titlePython编程从入门到实践/title author埃里克·马瑟斯/author price89.00/price /book book id2 titleJava核心技术/title author凯·霍斯特曼/author price129.00/price /book /library # 解析XMLtreeetree.fromstring(xml_str)# 2. 用XPath定位节点核心操作# 示例1获取所有book的id属性book_idstree.xpath(//book/id)print(所有book的id,book_ids)# 输出[1, 2]# 示例2获取价格100的book的标题high_price_bookstree.xpath(//book[price100]/title/text())print(价格100的书籍标题,high_price_books)# 输出[Java核心技术]# 示例3获取第二个book的作者second_book_authortree.xpath(//book[2]/author/text())print(第二个book的作者,second_book_author)# 输出[凯·霍斯特曼]# 示例4获取所有title和price的文本titles_and_pricestree.xpath(//title/text() | //price/text())print(所有标题和价格,titles_and_prices)# 输出[Python编程从入门到实践, 89.00, Java核心技术, 129.00]五、XPath 的使用场景XML 解析快速提取 XML 中指定条件的数据替代繁琐的遍历网页爬虫XPath 是解析 HTMLHTML 本质是不严格的 XML的核心工具能精准定位网页中的元素比如爬取商品标题、价格配置文件处理快速修改 / 读取 XML 配置文件中的特定节点总结XPath 是 XML 的路径查询语言核心作用是快速定位 / 筛选 XML 中的元素、属性、文本节点比手动遍历效率高XPath 的核心语法包括/绝对路径、//任意路径、属性、[]条件筛选、|多路径实际开发中XPath 常配合解析库如 Python 的 lxml使用是处理 XML/HTML 数据的必备技能