XSL 语言全解析(2025 年最新版,中文)
XSL 其实不是一种语言,而是 一组三种相关技术的统称,全称是 Extensible Stylesheet Language(可扩展样式表语言)。
| 名称 | 标准名称 | 主要作用 | 文件后缀 | 当前状态 |
|---|---|---|---|---|
| XSLT | XSL Transformations | 把 XML 转换成 HTML、XML、文本、JSON 等 | .xsl | 活跃使用(1.0/2.0/3.0) |
| XPath | XML Path Language | 在 XML 中定位节点、写表达式 | – | 活跃使用(1.0/2.0/3.1/4.0) |
| XSL-FO | XSL Formatting Objects | 把 XML 排版成 PDF、专业印刷格式 | .fo | 几乎无人使用 |
90% 的人说“我要学 XSL”时,其实真正想学的是 XSLT,下面重点讲 XSLT,也顺带澄清其他两个。
一、XSLT(真正常用的“XSL 语言”)
1. 版本对比(2025 年现状)
| 版本 | 发布年份 | 主流处理器支持 | 实际使用比例 | 推荐程度 |
|---|---|---|---|---|
| XSLT 1.0 | 1999 | 所有浏览器、libxslt、Saxon | 60% | 足够日常使用 |
| XSLT 2.0 | 2007 | Saxon、Oxygen、Altova | 30% | 强烈推荐(功能强大) |
| XSLT 3.0 | 2017 | Saxon-PE/EE、Exselt | 10%+快速增长 | 现代项目首选 |
| XSLT 4.0 | 2024 | Saxon 12+ | <1% | 前瞻性学习 |
2. XSLT 核心语法速览(1.0 + 2.0/3.0 常用)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- 变量 -->
<xsl:variable name="taxRate" select="0.17" as="xs:double"/>
<!-- 模板(最重要) -->
<xsl:template match="/catalog/book">
<div class="book">
<h2><xsl:value-of select="title"/></h2>
<p>作者:<xsl:value-of select="author"/></p>
<p class="price">¥<xsl:value-of select="format-number(price * (1 + $taxRate), '#,##0.00')"/></p>
</div>
</xsl:template>
<!-- 高级:函数(XSLT 3.0) -->
<xsl:function name="my:discount" as="xs:double">
<xsl:param name="price" as="xs:double"/>
<xsl:sequence select="if ($price > 100) then $price * 0.8 else $price * 0.9"/>
</xsl:function>
</xsl:stylesheet>
3. 现代 XSLT 3.0 必学特性(2025 年流行写法)
<!-- 1. 箭头操作符 => (超级好用) -->
<xsl:value-of select="title => upper-case() => replace('JAVA', 'Java')"/>
<!-- 2. 数组与映射(JSON 友好) -->
<xsl:variable name="config" as="map(xs:string, xs:string)">
<xsl:map>
<xsl:map-entry key="'title'" select="'我的书店'"/>
<xsl:map-entry key="'currency'" select="'CNY'"/>
</xsl:map>
</xsl:variable>
<!-- 3. XML → JSON 官方转换(一句话搞定!) -->
<xsl:output method="json"/>
<xsl:template match="/">
<xsl:sequence select="xml-to-json(.)"/>
</xsl:template>
二、XPath(XSLT 的“查询语言”)
| 版本 | 新特性举例 |
|---|---|
| XPath 3.1 | 支持 map、array、JSON 字面量 |
| XPath 4.0 | 箭头函数、记录类型、let 表达式 |
常用写法(2025):
//book[price > 100]/title
//book ! title (: 简写,等价于上面的 :)
map { "total": sum(//price) }
array { //book/title }
三、XSL-FO(基本可以忽略)
- 用来生成 PDF 的纯排版语言
- 写法极其繁琐(一张 A4 纸可能几百行)
- 2025 年几乎没人用(都被 HTML + CSS Paged Media 或 WeasyPrint、PrinceXML 取代)
四、2025 年 XSLT 实际应用场景
| 场景 | 推荐版本 | 常用工具 |
|---|---|---|
| 企业内部 XML 数据转换 | XSLT 2.0/3.0 | Saxon-PE/EE |
| XML → HTML 网页渲染 | XSLT 1.0 | 浏览器自带 |
| XML → JSON 接口转换 | XSLT 3.0 | Saxon + xml-to-json() |
| DocBook → PDF/HTML | XSLT 2.0 | Oxygen XML + Apache FOP |
| Maven、Ant、Gradle 构建 | XSLT 1.0/2.0 | 内置支持 |
| EDI、HL7 医疗报文转换 | XSLT 2.0 | Altova MapForce、Saxon |
五、学习路线(2025 推荐)
- 先学 XSLT 1.0 + XPath 1.0(1 周,够用 80% 场景)
→ W3Schools 中文教程:https://www.w3schools.cn/xslt/ - 进阶 XSLT 2.0(强烈推荐,函数、分组、正则)
→ 书籍:《XSLT 2.0 和 XPath 2.0 程序员参考》第 4 版 - 掌握 XSLT 3.0(未来方向,JSON、map、箭头操作符)
→ 官方规范 + Saxon 文档 - 实战项目:RSS → HTML、OpenAPI XML → JSON、pom.xml 报表生成
六、快速在线练习工具(2025)
- https://xsltfiddle.liberty-development.net/ (支持 3.0)
- https://www.freeformatter.com/xsl-transformer.html
- VS Code 插件:SaxonJS / XSLT/XPath
总结一句话:
现在说的“XSL 语言” = XSLT + XPath,XSL-FO 可以忽略了。
学会 XSLT 3.0,你就掌握了目前最强大的 XML → 任意格式转换技术。
有具体的 XML 文件想转换吗?贴出来,我 30 秒给你写出现代 XSLT 3.0 方案!