matches()、for … in … return、! 映射、tokenize())在自动模式下会自动切到 3.1 引擎,首次使用需加载约 0.3 MB 的库。结果显示在这里…
在浏览器里对一段 XML 或 HTML 试跑 XPath 表达式,立刻看到匹配到哪些节点。写爬虫(Scrapy / lxml / Selenium)或处理 XML 配置时,用来验证路径写得对不对,不用反复跑脚本。
/@属性,点文本得到 /text();可选「简短(优先 id / class)」或「绝对路径」两种风格。执行后匹配到的节点会在树里高亮。| 表达式形态 | 结果 |
|---|---|
//book/title |
节点集,逐个列出元素、属性、文本、注释 |
//a/@href |
属性节点,显示 名称="值" |
//title/text() |
文本节点 |
count(//book) |
数字 |
string(//title) |
字符串 |
//book[@category='tech'] 配 boolean(...) |
布尔值 |
//book/title ! upper-case(.)(3.1) |
值序列(映射运算符 !) |
for $b in //book return $b/price * 2(2.0+) |
值序列 |
//book[matches(title, 'Web')](2.0+) |
节点集(正则函数 matches) |
节点集超过 500 条时只显示前 500。
DOMParser + document.evaluate(XPath 1.0),纯本地运行,不联网、不上传你粘贴的内容。for … return、if … then … else、some / every、matches() / tokenize() / replace() 等正则字符串函数、upper-case()、序列与映射运算符 !、内联函数等。返回值不再局限于节点,可以是字符串、数字、序列,甚至 3.1 的数组和 map(按 JSON 显示)。//div、//a/@href 这样不带前缀的名字(HTML 元素在 XHTML 命名空间里,已自动处理)。ns:tag 仍没有前缀映射,可以改用 *[local-name()='tag'] 匹配。parsererror,这时切到「按 HTML 解析」。id 就用 //*[@id="…"] 开头,同名兄弟里 class 能区分就用 [@class="…"],否则用位置 [n];这只是一种可行写法,不一定是最稳健的选择,爬虫里长期使用的表达式建议自己再精简。相关:JSON 编辑 · XML 格式化 · HTML 格式化 · XML 转 JSON · 正则测试。
只对你粘贴进来的文本求值,不访问真实网页 DOM,也不做带前缀的命名空间解析。