XPath在线测试工具
免费在线XPath表达式测试工具,粘贴HTML或XML源代码,实时验证XPath查询结果,展示匹配的节点名称、索引、完整outerHTML、innerText和所有属性,支持属性选择器、层级导航、谓语条件等标准XPath 1.0语法,帮助爬虫开发、数据提取、自动化测试脚本编写。
HTML/XML 源代码
XPath 查询器
快速选择示例
查询结果
0 个匹配
等待查询
输入XPath表达式并点击「测试」按钮查看匹配结果
功能特性
实时验证
粘贴HTML/XML源码,一键执行XPath查询,秒级返回匹配结果,提升表达式调试效率。
语法支持
完整支持XPath 1.0标准语法,含属性选择器、层级导航、谓语条件、轴操作、内置函数等。
属性展示
自动提取匹配节点的所有属性并以chip形式展示,直观查看class、id、href、data-*等属性值。
outerHtml预览
展示匹配节点完整的原始HTML片段(outerHTML),支持一键复制,方便用于爬虫或数据提取脚本。
结果截断
匹配数过多时自动截断并仅展示前100条结果,附带总量提示,防止页面卡顿和加载时间过长。
错误定位
XPath语法错误或执行异常时,返回清晰的错误信息,帮助快速定位和修正表达式问题。
使用说明
1. 输入源数据
- 在左侧「HTML/XML 源代码」卡片的文本框中粘贴需要解析的 HTML 页面源代码或 XML 文档内容。
- 文本框已预置示例内容,可直接点击「运行示例」快速体验工具效果。
- 支持任意大小的文档,过大的文档匹配大量节点时仅展示前100个结果。
2. 编写 XPath 表达式
- 在「XPath 查询器」卡片的输入框中填写 XPath 1.0 标准表达式,如
//div[@class='item']。 - 可直接点击「快速选择示例」区域的按钮,一键填入常用的 XPath 模板。
- 支持属性选择器
[@attr='value']、索引谓语[1]、[last()]、函数contains()、count()等。
3. 查看与复用结果
- 点击「测试」按钮执行查询,结果卡片将展示匹配总数与详细节点列表。
- 每个节点包含索引、节点名、完整 outerHTML、innerText 文本内容、全部属性列表。
- 点击 outerHTML 右上角的复制按钮,可一键复制该节点的原始 HTML 代码,直接用于爬虫或测试脚本。
XPath 语法速查表
| 表达式 | 说明 |
|---|---|
nodename | 选取该名称的所有子节点 |
/ | 从根节点开始选取(绝对路径) |
// | 从当前节点开始选取文档中匹配的节点,不考虑位置 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性,如 @href、@class |
* | 匹配任意元素节点 |
@* | 匹配任意属性 |
node() | 匹配任意类型的节点 |
text() | 选取文本节点 |
[n] | 选取第 n 个节点(索引从 1 开始) |
[last()] | 选取最后一个节点 |
[position()<3] | 选取位置小于 3 的节点 |
[@attr] | 选取带有指定属性的节点 |
[@attr='val'] | 选取属性等于指定值的节点 |
[contains(@attr,'val')] | 属性值包含指定子串的节点 |
[starts-with(@attr,'val')] | 属性值以指定串开头的节点 |
count(nodes) | 统计节点数量 |
concat(a,b) | 拼接两个字符串 |
string-length(s) | 返回字符串长度 |
常见问题
本工具支持什么版本的 XPath 语法?
本工具基于 HtmlAgilityPack 解析库,支持 XPath 1.0 标准语法。这是目前业界应用最广泛的版本,绝大多数浏览器、爬虫框架(如 Scrapy、Selenium、BeautifulSoup + lxml)、XML 库均兼容 XPath 1.0。常用语法如路径导航(
/、//、..)、谓语条件 []、属性选择器 @、以及常用内置函数(contains()、starts-with()、count()、concat()、text()、last()、position() 等)均已支持。
如何使用属性选择器匹配包含某个 class 的元素?
直接使用
[@class='xxx'] 只能匹配完全相等的 class 值,无法匹配多个 class 中包含某个类名的情况。推荐使用 contains() 函数,例如 //div[contains(@class,'welcome')] 可以匹配 class 中包含 "welcome" 子串的所有 div 元素。更严谨的写法可使用空格包裹://div[contains(concat(' ', normalize-space(@class), ' '), ' welcome ')]。同样的模式也适用于 starts-with()、ends-with()(注:XPath 1.0 无 ends-with,可用 substring() 替代)。
XML 带有命名空间(xmlns)时如何处理?
本工具的底层 HtmlAgilityPack 按 HTML 宽松模式解析,对 XML 命名空间的处理不严格。若查询带命名空间前缀的 XML 文档(如
<ns:item>),直接使用 //item 通常仍能匹配到节点(HtmlAgilityPack 会忽略前缀)。如需精确匹配,可使用本地名称谓词://*[local-name()='item'],或结合命名空间 URI://*[local-name()='item' and namespace-uri()='urn:xxx']。对于带有默认命名空间 xmlns="..." 的 XML,推荐使用 local-name() 函数绕过前缀检查。
如何直接提取属性值或文本内容,而不是整个节点?
在 XPath 表达式末尾追加
/@属性名 即可提取属性值。例如 //a/@href 提取所有链接的 href 属性,//img/@src 提取图片地址,//div/@data-id 提取自定义 data 属性。提取纯文本则使用 /text(),例如 //h2/text() 直接获取 h2 元素内部的纯文本字符串。注意返回的结果是属性或文本节点本身,在使用编程语言解析时需取其 Value 或 .Value 属性。
如何只提取匹配元素的纯文本(innerText)?
方法一:使用
/text() 只选取直接子文本节点,例如 //p/text()。方法二:使用 XPath 内置函数 string(),如 string(//div[@class='welcome']) 会递归拼接该元素及其所有子元素的文本内容。方法三:normalize-space() 函数可同时去除前后空白并合并连续空格:normalize-space(//h2)。对于需要按文档顺序获取全部文本的场景,本工具也会在每个匹配节点中自动展示 innerText 字段,直接复制使用即可。