🌳XPath 在线测试 - CSS 选择器测试与自动生成选择器
写爬虫、做自动化测试或处理 XML 配置时,经常要反复调试一条 XPath 或 CSS 选择器。把 XML 或 HTML 粘贴进来(会自动识别类型,也可以手动切换),输入表达式即可实时看到结果:匹配到的元素、属性和文本节点会在格式化后的源码视图里高亮,右侧列出每个匹配的绝对路径、属性和文本内容。XPath 使用浏览器内置的 XPath 1.0 引擎,除节点集外,count()、sum()、string()、boolean() 等函数的数值、字符串、布尔结果也会直接显示。带默认命名空间的文档(如 Atom、SVG、SOAP、Maven pom.xml)在 XPath 1.0 里必须用前缀访问——工具会自动收集文档中的命名空间声明并为默认命名空间分配 ns 前缀,你也可以自行增删前缀映射。反过来,点击源码视图里的任意元素、属性或文本,工具会生成多条经过验证、只匹配这一个节点的 XPath 和 CSS 选择器,优先使用 id、属性、文本等稳定特征,最短的排在最前,一键填回表达式或复制。附带 XPath 与 CSS 速查表和三个示例文档。所有解析都在浏览器本地完成,内容不会上传。
免费 · 无需注册 · 浏览器本地处理最后更新:
正在加载工具...
如何使用XPath / CSS 选择器测试
- 1粘贴 XML 或 HTML,或点击示例载入
- 2选择 XPath 或 CSS,输入表达式,查看高亮与匹配列表;有默认命名空间时使用前缀
- 3点击源码中的节点,复制自动生成的唯一 XPath / CSS 选择器
常见问题
- 为什么 //entry 在 Atom / SVG 文档里匹配不到?
- 这类文档用 xmlns="…" 声明了默认命名空间,而 XPath 1.0 中不带前缀的名称只匹配“没有命名空间”的元素。请使用工具自动分配的前缀,例如 //ns:entry/ns:title;或者写成 //*[local-name()='entry'] 忽略命名空间。CSS 选择器不受这个限制。
- 生成的选择器可靠吗?
- 每一条生成结果都会在当前文档里实际执行一次,确认只匹配被点击的那个节点才会显示。工具优先使用 id、name、class、data-* 等属性或短文本,其次从最近的可唯一定位的祖先出发,最后才退回带序号的绝对路径。不过网页结构变化后选择器可能失效,带序号的路径最脆弱。
- 支持 XPath 2.0 / 3.0 吗?
- 不支持。浏览器只内置 XPath 1.0,因此 matches()、lower-case()、序列表达式等 2.0 以上的函数不可用。常用的 contains()、starts-with()、normalize-space()、translate()、count()、sum()、position()、last() 以及各种轴(ancestor、following-sibling 等)都可以使用。
- HTML 模式下路径为什么多了 /html/body?
- 浏览器解析 HTML 时会自动补全 <html>、<head>、<body> 并把标签名转成小写,这与 Chrome 开发者工具、Selenium、Playwright 看到的 DOM 一致,所以生成的选择器可以直接用在这些工具里。如果需要严格按原样解析,请把文档类型切换为 XML(要求格式良好)。