XPath 测试器
XPath Tester
对 XML 或 HTML 求值 XPath 或 CSS 选择器,把命中的节点全部列出来。
对一份 XML 或 HTML 文档运行 XPath 1.0 表达式或 CSS 选择器,显示它匹配的每个节点和到达每个节点的绝对路径。求值用的是浏览器自己的,所以你在这里看到的就是 `document.evaluate` 在你代码里会做的。
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 演练场才是合适的工具。
怎么用
选择文档怎么读
XML 模式严格,会报告哪里格式不良。HTML 模式像浏览器一样宽松,并把标签名规范化为小写。
写表达式
XPath 或 CSS 选择器——开关切换是哪一种。示例按钮覆盖了属性、谓词、命名空间、注释节点,以及返回标量的函数。
先读结果类型
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::`)、能按文本内容匹配、能返回数字和字符串,这些选择器一样都做不到。这个页面两种都能运行,所以你可以在同一份文档上比较它们。
它会替我抓取页面吗?
不会。你粘贴或拖入文档,它在这个标签页里读取。抓取需要一个代理——浏览器不允许一个页面读另一个源——而那个代理会看到你测试的一切。
可以从这些接进来
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
HTML 美化与压缩
HTML Beautifier & Minifier
格式化或压缩 HTML,保留内联元素,是否折叠空白可选。
JSONPath 测试器
JSONPath Tester
对文档运行 JSONPath 表达式,边输入边高亮命中的节点。
JSON ⇄ XML 互转
JSON ⇄ XML
在 JSON 和 XML 之间转换,属性、数组和文本节点的处理方式都能配置。
XML 格式化与校验
XML Formatter & Validator
整理 XML 缩进,并报出第一处结构不合法的行和列。
Base64 编码解码
Base64 Encoder & Decoder
对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。
curl 转代码
curl to Code
把一条 curl 命令转成 fetch、axios、Python requests、Go、PHP 或 PowerShell 代码。