章节摘要:XPath 很少单独上场。XQuery 用它当定位核心再加 FLWOR;XSLT 用它当 select 语言把树变成另一棵树。版本上,1.0 仍是 lxml 与浏览器的现实,2.0 带来类型与变量,3.0/3.1 带来映射、数组、箭头运算符和对 JSON 的胃口。选版本等于选引擎,不是选喜好。
阅读完本章,你应当能够:
金句:路径是钉子,XQuery 是木工活,XSLT 是把旧家具改成新家具。钉子规格要跟锤子匹配。

XQuery 嵌入完整 XPath。需要 return 新 XML、join 两棵树、排序分组时升级到 XQuery,而不是把 XPath 写成面条。
match 和 select 里都是路径。当前节点随模板走,变量与 current() 的坑在第 3 章已埋。
合并 5.3 新特性与 5.4 趋势。3.0 的 map/array、箭头、try-catch;3.1 对 JSON 与流式。默认交付 1.0,除非团队已经统一 Saxon。
先分清三件套职责,再在 XSLT 里认出旧路径,最后按引擎锁版本。
5.1 查询亲戚 XQuery ──► 5.2 变换亲戚 XSLT ──► 5.3 版本阶梯
读者学完路径之后,最常见的下一步是搜「XPath 和 XQuery 有什么区别」,然后被特性表淹没。本章用职责切开:XPath 定位,XQuery 在定位之后查询并构造新文档,XSLT 用模板把旧树变成新树。前四章写的路径在后两者里都还能用——嵌进 for 子句,或写进 select 属性。不需要先换一门语言才能继续抠书名。
版本是另一把刀。1.0 是 lxml 和浏览器的现实;2.0 带来类型和变量;3.0 与 3.1 带来箭头、映射、JSON 胃口和流式。原文集把 3.0 新特性和未来趋势分成两节,我们并在 5.3,避免趋势文章单独注水。交付给未知引擎的表达式默认 1.0。团队已经统一 Saxon 再启用 2.0 或 3.1。
| 节 | 你要能向别人复述的一句话 |
|---|---|
| 5.1 | 只要节点列表就别上 XQuery;要新 XML 形状才上 |
| 5.2 | 模板负责策略,select 里仍是路径;for-each 会改当前节点 |
| 5.3 | 先问引擎版本,再抄箭头和 current-date |
若你的工作只是用 Python 清洗 XML 和偶尔抓页面,本章可以略读,记住「不要抄 3.0 进 lxml」即可。若你维护样式表或 XML 数据库,5.1 和 5.2 值得对照着现有代码看:哪里已经在用你会写的路径,哪里误把业务规则写成了过长的 match。
学完路径最容易做的两件多余的事:一是立刻改写为 XQuery,尽管下游只要列表;二是把 3.0 箭头抄进 lxml。本章用职责和版本两把刀把它们拦住。XPath 定位,XQuery 查询加构造,XSLT 模板变换。路径在后两者里都能嵌。版本跟随引擎:1.0 是现实,2.0 要日期正则变量,3.1 要 JSON 模型和流式。语法糖不驱动升级。
XSLT 的 value-of 和 Java 的字符串返回是同一类偏心:多节点只取第一。for-each 改变当前节点,相对路径跟着变。match 已经站在书上就不要再写从根出发的绝对 select。这些是第 1 章上下文规则的再现,不是新语言。趋势上 JSON 工作负载会增加,XML 管道不会因此消失。把时间花在 1.0 写准和命名空间绑上,比追特性表回报高。
验收建议:拿一份带默认命名空间的接口响应绑前缀抠字段;拿一份 HTML 列表用相对卡片取标题。两份练习比阅读 3.1 规范更能暴露空结果。第 5 章可以略读,但「不要抄 3.0 进 1.0 引擎」这句话要带走。
定位、查询加构造、模板变换是三件套,路径在后两者里都能嵌。版本跟随引擎:低版本是现实,中版本给类型和变量,高版本给映射、对象记法和流式。语法糖不驱动升级。取值指令和字符串返回是同一类偏心。趋势上对象记法会多,标记语言管道不会消失。可以略读本章,但不要把高版本抄进低版本引擎这句话必须带走。验收是报文绑护照和页面相对卡片,不是背特性表。
定位负责取出节点,查询语言在取出之后构造新文档并对齐两棵树,变换语言用模板把旧树折成新树。前四章写的路径在后两者里都能嵌,不必先换一门语言才能继续抠书名。版本跟随引擎:低版本是轻量库和浏览器的现实,中版本给类型和变量,高版本给从左往右读、映射和对象记法胃口。为了读起来顺去换栈,多数清洗项目不划算。取值指令和字符串返回是同一类偏心,多节点只留第一。趋势上对象记法工作负载会增加,标记语言管道不会消失。可以略读,但不要把高版本抄进低版本引擎这句话必须带走。验收仍是带默认空间的报文能绑贴纸抠出字段,以及页面列表用相对卡片取标题。
版本选择写成团队约定比写成个人口味可靠:未知引擎默认一点零;统一了高版本引擎再开日期类型和箭头。约定贴在代码评审清单第一行,比把特性表背进脑子更能拦住抄错。语法糖不驱动换栈。