跳到正文

XPath 测试器

XPath Tester

对 XML 或 HTML 求值 XPath 或 CSS 选择器,把命中的节点全部列出来。

对一份 XML 或 HTML 文档运行 XPath 1.0 表达式或 CSS 选择器,显示它匹配的每个节点和到达每个节点的绝对路径。求值用的是浏览器自己的,所以你在这里看到的就是 `document.evaluate` 在你代码里会做的。

🔒 完全在你的浏览器里运行xpathxmlselectortest

XPath 1.0 表达式

查询语言

文档

按什么读

放一个文件进来

只在这个标签页里读取。

结果

你一边输入,结果就一边出现在这里。

它是怎么跑的

  • · 求值用的是浏览器自己的 document.evaluate(XPath 1.0)和 querySelectorAll。结果的类型——节点集、数值、字符串、布尔——以及每个节点的绝对路径和命名空间前缀的处理,都是这个工具加的。
  • · XML 模式严格地读,并指出哪里不对;HTML 模式像浏览器那样宽容地读。HTML 会把标签名规范成小写,所以 //DIV 不行, //div 才对。
  • · 在声明了默认命名空间(xmlns="…")的文档里,不带前缀的名字什么都匹配不到——这是 XPath 1.0 的规则。这时候用 _ 前缀,写成 //_:item。
  • · XPath 2.0 和 3.x 的函数(matches, ends-with, lower-case)在任何浏览器里都没有。 contains·starts-with·translate·normalize-space 才是 1.0 给你的。
  • · 文档只在这个标签页里读取,不会上传到任何地方。

JSON 的话, JSONPath 测试器 或者 jq 演练场才是合适的工具。

怎么用

  1. 选择文档怎么读

    XML 模式严格,会报告哪里格式不良。HTML 模式像浏览器一样宽松,并把标签名规范化为小写。

  2. 写表达式

    XPath 或 CSS 选择器——开关切换是哪一种。示例按钮覆盖了属性、谓词、命名空间、注释节点,以及返回标量的函数。

  3. 先读结果类型

    XPath 返回四种东西,其中只有一种是节点集。`count()`、`string()` 和 `boolean()` 给你一个单独的值,它会单独显示,而不是作为一个空的匹配列表。

常见问题

我的表达式什么都匹配不到,文档看起来没问题。

几乎可以肯定是默认命名空间。如果文档的根上有 `xmlns="…"`,XPath 1.0 规定不带前缀的名字什么都不匹配——你必须绑定一个前缀。这里那个前缀是 `_`,所以 `//item` 要写成 `//_:item`。

为什么没有 `matches()`?

因为浏览器只实现 XPath 1.0。`matches`、`ends-with`、`lower-case` 之类是 2.0 才有的,没有浏览器实现它。1.0 的工具箱是 `contains`、`starts-with`、`translate` 和 `normalize-space`。

XPath 还是 CSS——我该用哪个?

CSS 更短,对大多数抓取来说够用。XPath 能向上走(`..`、`ancestor::`)、能按文本内容匹配、能返回数字和字符串,这些选择器一样都做不到。这个页面两种都能运行,所以你可以在同一份文档上比较它们。

它会替我抓取页面吗?

不会。你粘贴或拖入文档,它在这个标签页里读取。抓取需要一个代理——浏览器不允许一个页面读另一个源——而那个代理会看到你测试的一切。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。