XSLT 是一种用于转换 XML 文档的声明式语言,通过 XPath 定位节点、模板定义输出规则,需源 XML、XSLT 样式表(含命名空间声明)和处理器三者配合,支持转为 HTML、文本、XML 等格式。

XSLT 是一种专门用来转换 XML 文档的声明式语言,全称是 Extensible Stylesheet Language Transformations。它不负责显示样式(那是 CSS 或 XSL-FO 的事),而是把一份 XML 按规则“重写”成 HTML、纯文本、另一种 XML 结构,甚至 JSON(需配合扩展)。核心逻辑是:用 XPath 找节点,用模板定义怎么输出。
XSLT 转换要准备三样东西
缺一不可:
-
源 XML 文件:比如
books.xml,含原始数据结构 -
XSLT 样式表文件:比如
books.xsl,是标准 XML 格式,必须声明命名空间xmlns:xsl="http://www.w3.org/1999/XSL/Transform",根元素用<xsl:stylesheet>或<xsl:transform>(二者完全等价) -
XSLT 处理器:执行转换的引擎,常见有浏览器(仅支持 XSLT 1.0)、
saxon(命令行或 Java)、XslCompiledTransform(.NET)、libxslt(Python 的 lxml)等
一个最简可用的转换示例
假设 books.xml 有如下内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="books.xsl"?>
<catalog>
<book id="b1">
<title>XML Basics</title>
<author>John Doe</author>
</book>
</catalog>
对应 books.xsl 可这样写:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<h2>Book List</h2>
<xsl:apply-templates select="catalog/book"/>
</body></html>
</xsl:template>
<xsl:template match="book">
<p><strong><xsl:value-of select="title"/></strong> by <xsl:value-of select="author"/></p>
</xsl:template>
</xsl:stylesheet>
关键点:match="/" 匹配根节点,match="book" 定义如何渲染每个 book 元素,xsl:value-of 提取文本值,xsl:apply-templates 触发子匹配。
怎么执行转换
方式取决于使用场景:
-
浏览器直接打开 XML:只要 XML 文件里有
<?xml-stylesheet ...?>声明,且浏览器支持(如旧版 Firefox、IE),就会自动加载并渲染为 HTML(注意:现代 Chrome/Safari 已移除原生 XSLT 支持) -
命令行(推荐调试):安装
saxon-he后运行java -jar saxon-he.jar books.xml books.xsl -
.NET 环境:用
XslCompiledTransform类加载 .xsl,调用Transform()方法输出到文件或流 -
JavaScript(前端):用
DOMParser和浏览器内置XSLTProcessor对象(仅限支持环境),适合轻量动态转换
常见用途和注意事项
XSLT 不是万能胶,但特别适合结构化数据的“格式搬家”:
- 把内部 XML 日志转成带表格和颜色的 HTML 报告
- 从通用 XML Schema 输出适配某系统要求的专用 XML 接口格式
- 过滤敏感字段(如去掉
<password>)、重排序、合并多个 XML 文件 - 注意版本兼容性:XSLT 1.0 最广泛支持;2.0/3.0 功能更强(正则、分组、高阶函数),但需 Saxon 或 Altova 等高级处理器
- 避免在 XSLT 中做复杂业务逻辑——它不是编程语言,嵌套过深或大量条件易难维护










