CodeKitHub
代码工具

XPath 测试工具

最后更新:

XPath 是一种用路径表达式从 XML(或 HTML)文档中选取节点的查询语言,原理类似于用文件路径在文件夹树中定位一个文件。这个工具让你粘贴任意 XML、写一条 XPath 表达式,立即看到哪些节点匹配——包括节点数量、序列化后的输出,以及针对错误的 XML 或 XPath 语法给出的清晰错误提示。它完全在浏览器内运行,使用每个现代浏览器都内置的原生 `document.evaluate` 引擎,你粘贴的任何内容都不会被上传到任何地方。

工具介绍

XPath(XML Path Language)是 W3C 制定的标准,用一种紧凑的类路径语法在 XML 文档中导航和选取节点——元素、属性、文本,例如 `//book[price>30]/title` 会选出文档任意位置中,其同级 `<price>` 大于 30 的所有 `<title>`。它被广泛用于 XSLT 样式表、XML 校验工具、网页抓取程序、浏览器自动化框架(Selenium、Playwright)以及许多编程语言的 XML 库中。

目前 Chrome、Firefox、Safari、Edge 等所有主流浏览器实现的版本都是 XPath 1.0,也就是 1999 年发布的原始 W3C 推荐标准。这个工具通过浏览器的 `document.evaluate()` API 使用的正是这套原生引擎,因此这里的结果与你在浏览器 DevTools 或任何浏览器端 JavaScript 中运行同一表达式得到的结果完全一致。它不支持之后的 XPath 2.0/3.0/3.1 规范(那些版本新增了 `for` 表达式、序列、正则匹配等功能)——常见问题部分对此有更详细的说明。

一条表达式可能返回两种结果之一:一个节点集(零个或多个匹配的元素、属性或文本节点,这个工具会将其序列化并逐行列出,附带数量),或者一个标量值——数字、字符串或布尔值——当表达式本身就是在计算一个值时,比如 `count(//book)` 或 `//book[1]/title = 'Dune'`。

为什么使用它?

  • 在把 XPath 表达式硬编码进网页抓取程序、Selenium/Playwright 测试或 XSLT 样式表之前先调试一遍。
  • 快速核实某条 XPath 是否能从真实的 XML/HTML 样本中选出你期望的节点。
  • 直接查看精确的匹配数量和序列化输出,而不用靠代码去猜。
  • 对格式错误的 XML 或无效的 XPath 语法,立即得到可读的错误提示,而不是一堆看不懂的堆栈信息。
  • 100% 客户端运行:你的 XML 和表达式不会离开浏览器。

使用方法

  1. 在输入框中粘贴或编辑你的 XML(或 HTML)——已预填一个书店示例文档,方便你立刻看到效果。
  2. 在表达式输入框中输入一条 XPath 表达式,或者直接编辑预填的示例。
  3. 点击"求值"(或在表达式输入框中按回车)。
  4. 在下方查看匹配到的节点,顶部会显示数量;标量结果(数字、字符串、布尔值)会直接显示。
  5. 如果 XML 或表达式无效,结果区域会显示具体的错误信息。

示例

输入

XML:
<bookstore>
  <book><title>The Great Gatsby</title><price>12.99</price></book>
  <book><title>Learning XPath</title><price>34.50</price></book>
  <book><title>Dune</title><price>45.00</price></book>
</bookstore>

XPath: //book[price>30]/title

输出

✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>

三本书中只有两本价格超过 30,所以恰好返回了 2 个 <title> 元素——第三本书(Gatsby,$12.99)被正确排除在外。

XPath 与 CSS 选择器速览对比

两种语言都用于从文档中选取节点,但解决的问题不同。用下表来判断某次选取该用哪种工具。

能力XPathCSS 选择器
按标签/class/id 向下选取支持支持——通常更快
按可见文本/内容选取支持——`contains(text(),'x')`不支持
向上遍历到父/祖先节点支持——`//div[span]/..`不支持(`:has()` 是较新的部分例外)
同级值比较(如 `price>30`)支持不支持
可脱离浏览器使用(服务端 XML 工具、XSLT)支持不支持——CSS 选择器专属于浏览器/DOM

相关工具

正在处理结构化数据格式?这些工具和 XPath 测试搭配使用效果不错。

JSON 格式化工具 · JWT 解码器

常见问题

XPath 有什么用?

XPath 用路径语法从 XML 或 HTML 文档中选取节点——元素、属性或文本。它是 XSLT 转换、许多 XML 校验工具背后的选取语言,也广泛用于网页抓取和浏览器测试自动化(Selenium、Playwright、Cypress)中定位页面元素,尤其是在单靠 CSS 选择器无法表达所需条件时。

XPath 和 CSS 选择器该用哪个?

两者有重叠但并不等价。XPath 可以根据子元素内容选取父元素(`//div[span='Total']`),可以向上遍历到祖先节点,还可以按可见文本选取(`//button[contains(text(),'Submit')]`)——CSS 选择器做不到向上遍历,也完全无法根据文本内容匹配。如果只是按标签、class 或 ID 沿文档向下选取,CSS 选择器写起来更简单,求值通常也更快。当你需要"选取这段文本的父元素"或"根据元素显示的内容来选取",而不只是根据标签或 class 时,才应该用 XPath。

这个工具支持 XPath 2.0 或 3.0 的函数吗?

不支持——事实上没有任何浏览器支持。浏览器通过 `document.evaluate()` 实现的是 XPath 1.0(1999 年的 W3C 推荐标准),这个工具使用的正是这套原生引擎,因此结果和你在浏览器 DevTools 或 JavaScript 中运行同一表达式得到的完全一致。XPath 2.0/3.0/3.1 中引入的函数和特性(比如 `for` 表达式、序列,或带正则的 `matches()`)在这里都不可用——只有 `contains()`、`starts-with()`、`substring()`、`count()`、`position()`、`last()` 这类 1.0 函数才能使用。

有哪些常用的 XPath 表达式值得了解?

`//tag` 选取文档中任意位置的所有 `<tag>`。`//tag[@attr='value']` 选取 `attr` 属性等于 `value` 的 `<tag>` 元素。`//tag[contains(text(),'x')]` 选取直接文本内容包含 `x` 的 `<tag>` 元素。`//tag[1]` 选取每个父元素下第一个 `<tag>` 同级节点。`//parent/child` 选取 `<parent>` 的直接子元素 `<child>`。`count(//tag)` 返回一个数字而不是节点集。

这个工具支持 XML 命名空间吗?

只完善支持了最常见的无命名空间场景,这也覆盖了绝大多数手写或抓取得到的 XML/HTML。如果你的文档在根元素上声明了 XML 命名空间(例如 `xmlns="..."`),`document.evaluate` 就需要一个能感知命名空间的解析函数,将前缀映射到 URI,而这个简易工具没有配置这一层——针对带命名空间的 XML,表达式即使看起来正确也可能返回零匹配。这是已知的限制,不是 bug:你可以去掉样本中的命名空间声明,或者用 local-name() 函数作为变通方案(例如 `//*[local-name()='title']`)。

我的 XML 或 XPath 表达式会被发送到服务器吗?

不会。所有计算都在本地使用浏览器内置的 `DOMParser` 和 `document.evaluate()` 完成——正是浏览器自身内部已经在使用的那套引擎。你输入或粘贴的任何内容都不会离开你的设备。

相关工具