第4章 在代码和工具里跑 XPath


第 4 章 · 在代码和工具里跑 XPath

章节摘要:XPath 表达式只有接到求值器上才算完成。本章把同一条 /bookstore/book[@category='web']/title 接到 Python lxml、Java XPathFactory、浏览器 evaluate,以及抓取与编辑工具。然后用具体对比说明为何 // 是性能第一嫌疑,以及可移植性、空结果排查这些最佳实践。合并原文的应用场景与最佳实践,避免单独开空节。

上手前先明确

阅读完本章,你应当能够:

  1. 在 lxml 与 Java 里对书店样本求出 web 类书名
  2. 说明返回类型 NODESET 与 STRING 的差别
  3. 在浏览器和抓取工具里试简单路径,并知道 HTML 命名空间陷阱
  4. 把宽泛的双斜杠收成从已知根出发的 child 链,降低遍历量

核心概念速览

金句:表达式可移植,求值器不可假定——先问版本,再问返回类型。

图:一条路径,四扇门

图:一条路径,四扇门

子章节导航

4.1 编程语言里的 XPath

Python lxml 与标准库 ElementTree 的能力差、Java 的返回类型、C# PHP 的入口。原文集用 Java 查出全部 title 文本以及 web 类书名。

4.2 浏览器、抓取与常见工具

开发者工具、页面自动化、编辑器里的 XPath 求值。应用场景并入:配置抽取、RSS、测试定位。CSS 选择器够用时不必上 XPath。

4.3 性能优化与最佳实践

少用 //、谓词前移、缓存编译后的表达式、命名空间一次注册。空结果三步排查回链第 1 章。

子章节之间的逻辑关系

先接通语言,再接通人用的工具,最后才谈快和稳。没接通就优化是空谈。

4.1 语言 API ──► 4.2 工具与场景 ──► 4.3 性能与纪律 ​

接通之后才谈快

本章故意把性能放在最后。没接到求值器上,讨论 // 扫了多少节点没有意义。4.1 先把同一条 web 类书名路径接到 lxml 和 Java,并强调返回类型:要列表就声明节点集,声明成字符串往往只拿到第一本。原文集的 Java 示例用字符串类型取 web 书名,样本里 web 只有一本时碰巧正确,四本样本就会丢书。

4.2 把人从 IDE 拉到浏览器和抓取配置。复制生成的绝对长链带一串位置谓词,广告插入一个块,后面全部错位。正确姿势是先选卡片容器,再对每张卡片用相对短路径。CSS 能稳定命中时不必上 XPath;需要父轴或文本 contains 时再请它。

节 接通对象 过关标准
4.1 lxml 与 Java 工厂 能说出节点集和字符串返回的差别
4.2 浏览器与抓取字段 不再把绝对链贴进生产
4.3 表达式形状与纪律 能把双斜杠收成三级 child 链

4.3 的清单可以当代码评审表:循环里是否每次编译、用户输入有没有拼进路径、空结果有没有先摘掉谓词看 count。硬件和换引擎是最后手段。XML 配置、RSS、SOAP 响应、测试定位这些场景并进 4.2,不再单独开一节罗列行业名词。

常见卡点

接通语言时差的不是斜杠写法,是返回类型、解析器和命名空间注册。Java 默认字符串类型会把三本书名砍成第一本,原文集 web 书名示例在只有一本 web 时碰巧对。HTML 解析补 tbody、浏览器 HTML 落在 XHTML 空间,都会让「源码里抄的路径」变空。这些不是 XPath 语法倒退,是树变了。先打印树,再写路径。

抓取字段不要贴开发者工具生成的绝对长链。先选卡片,再相对取标题。CSS 能稳就用 CSS。性能上能立刻改的是收双斜杠、谓词前移、编译放循环外。用户输入禁止拼进路径。空结果先摘谓词看 count。把这些写成评审问题,比单独背「最佳实践」章节有用。硬件和换引擎放最后。

本章合并了原文的应用场景:配置、RSS、SOAP、测试定位,都是树已经在那。JSON 文本不是树,1.0 路径怼不了。动态页面空经常是还没渲染,路径不会帮你等。把等待写成更多双斜杠只会更脆。读完应当能把同一条 web 类书名路径在一种语言里跑通,并说出另一种语言要注意的返回类型。

本章把同一条选出网络类书名的路径接到语言和工具上,差的不是斜杠怎么写,而是返回类型、解析器补出来的树、以及护照怎么注册。字符串返回会把四本书名砍成第一本,四本夹具里网络类有两本时就能揭穿这种碰巧。页面会补表格身体、元素可能落进另一套空间,源码里抄的绝对链会空。抓取先选卡片再取标题,复制来的带位置编号的长链只当草稿。性能先少看节点,把铺开全体收成三级链,编译放循环外,用户输入禁止拼进路径。空了先摘筛选看大小。配置、订阅源、报文是干净树;对象记法文本不是树;动态空常常是还没画出来。读完应当能在一种语言里跑通同一条路径,并说出另一种语言要注意的返回类型。

语言接通的验收不要只看「能跑」。把同一条选出网络类书名的路径在两种求值器上跑,把打印出来的书名并排:本数必须相同,顺序按文档序。少一本先查返回类型,多一本先查解析器有没有把推荐栏或补全节点加进树。三件事——解析选项、返回类型、命名空间表——不定,同一条路径在两种语言里对不上号,看起来像斜杠写错。验收过了再谈循环外编译。

前置知识与后续延伸

  • 前置:能手写路径、谓词、命名空间绑定。若 3.1 还没绑过前缀,带 xmlns 的文档在任何语言里都会空。
  • 后续:第 5 章若路径嵌在 XSLT 或 XQuery 里,API 换成样式表引擎或查询模块,但路径字符串本身仍按本章的可移植纪律来写。
作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U