本文目录
什么是 XPath?
XPath(XML 路径语言)是一种用于从 XML 文档中选取节点的 W3C 标准查询语言。它采用类似路径的语法,在 XML 树的层级结构中进行导航,根据节点的位置、名称或值来选取元素、属性和文本节点。
XPath 并不是一项独立的技术——它内嵌于 XSLT、XQuery 和 DOM API 等其他标准之中。每一款现代浏览器都支持用 XPath 查询 HTML 文档,而 Selenium、Scrapy 和 lxml 等工具则大量使用 XPath 表达式来进行网页抓取和自动化测试。
XPath 查询的工作原理
XPath 表达式通过轴(方向)、节点测试(过滤器)和谓词(条件)在文档树中进行导航。理解这三个概念,你就能构造出任意查询。
- 轴与路径—— / 从根节点开始选取,// 选取任意位置的后代节点,.. 移动到父节点,而 following-sibling:: 之类的命名轴则相对于当前节点进行导航
- 谓词与过滤器——方括号 [] 用于添加条件://book[price>30] 会选取价格高于 30 的书,而 //div[@class='main'] 会选取带有特定 class 属性的 div
- 函数与运算符——XPath 提供了 contains()、starts-with()、normalize-space() 和 count() 等内置函数,用于字符串操作、比较和节点计数
免费试用 —— 无需注册
测试 XPath 查询 →何时使用 XPath
每当你需要以编程方式从 XML 或 HTML 文档中提取特定数据时,XPath 都必不可少。
- 网页抓取——在 Scrapy、Puppeteer 或浏览器开发者控制台等工具中,使用 XPath 表达式从网页中提取商品价格、文章标题或链接
- XML 配置——查询并验证复杂的配置文件,如 Maven 的 pom.xml、Android 清单文件或 Spring XML 上下文,以查找特定设置或依赖项
- XSLT 转换——在 XSLT 样式表中选取用于转换的节点,这类样式表完全依赖 XPath 表达式来匹配 XML 元素并将其处理为不同的输出格式
常见问题
什么时候该用 XPath 而不是 CSS 选择器?
对于按标签、类或 ID 进行的基本元素选取,CSS 选择器更简单也更快。当你需要按文本内容选取(//a[contains(text(),'Login')])、向上导航到父节点、使用复杂谓词,或处理 XML(而非 HTML)文档时,应选择 XPath。在 XSLT 和 XQuery 环境中也必须使用 XPath。
XPath 1.0 和 2.0 之间有哪些变化?
XPath 2.0 增加了更丰富的类型系统(日期、序列、正则表达式)、条件表达式(if/then/else)、量化表达式(some/every)以及范围表达式。不过,大多数浏览器和抓取工具仅支持 XPath 1.0。请在 Saxon 之类的服务端工具中,或在处理 XSLT 2.0 时,使用 XPath 2.0 的特性。
在 XPath 中如何处理 XML 命名空间?
带命名空间的元素需要进行前缀映射。在大多数 API 中,你需要注册一个命名空间前缀(例如 ns='http://example.com'),然后使用该前缀进行查询://ns:book/ns:title。如果不注册命名空间,即使本地名称是 'book',//book 也无法匹配到位于某个命名空间中的元素。有些工具支持用 local-name() 作为变通方案://*[local-name()='book']。