XSLT是一种专用于转换XML文档的样式表语言,通过匹配XML元素将其重写为HTML等格式;需XML源文件、XSLT样式表和XSLT处理器三者配合完成转换。

XSLT 是一种专门用于转换 XML 文档的样式表语言,它通过匹配 XML 中的元素和结构,将其重写为另一种格式(如 HTML、纯文本或其他 XML)。把 XML 转成 HTML 是 XSLT 最常见的用途之一。
基本工作流程:XML + XSLT → HTML
要完成转换,你需要三样东西:
- 一个符合规范的 XML 源文件(比如包含书籍信息的
<book>列表) - 一个 XSLT 样式表(.xsl 文件),定义如何把每个 XML 元素变成 HTML 标签
- 一个支持 XSLT 的处理器(浏览器、命令行工具如
xsltproc,或编程语言中的解析器,如 Python 的lxml)
一个简单但完整的 XML → HTML 实例
假设你有如下 books.xml:
<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="1">
<title>深入浅出XSLT</title>
<author>张三</author>
<price>59.00</price>
</book>
<book id="2">
<title>XML完全手册</title>
<author>李四</author>
<price>72.50</price>
</book>
</library>对应编写 books.xsl:
立即学习“前端免费学习笔记(深入)”;
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <p><!-- 输出为 HTML5 兼容格式 --> <xsl:output method="html" indent="yes" doctype-system="about:legacy-compat"/></p><p><!-- 匹配根元素 /library --> <xsl:template match="/library"> <html> <head><title>我的图书列表</title></head> <body> <h1>图书目录</h1> <table border="1"> <tr><th>ID</th><th>书名</th><th>作者</th><th>价格</th></tr> <xsl:apply-templates select="book"/> </table> </body> </html> </xsl:template></p><p><!-- 匹配每个 book 元素 --> <xsl:template match="book"> <tr> <td><xsl:value-of select="@id"/></td> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="author"/></td> <td><xsl:value-of select="price"/></td> </tr> </xsl:template></p><p></xsl:stylesheet>
这个 XSLT 做了这些事:
- 用
<xsl:template match="/library">定义整体 HTML 结构 - 用
<xsl:apply-templates select="book">遍历所有<book>子节点 - 用
<xsl:template match="book">分别处理每本书,提取属性(@id)和子元素内容 -
<xsl:value-of>提取文本值,不会带标签;若需保留嵌套 HTML 可改用<xsl:copy-of>
如何运行这个转换?
方法取决于你的环境:
-
在浏览器中(仅限旧版 Firefox / IE 支持):在 XML 文件开头添加处理指令:
<?xml-stylesheet type="text/xsl" href="books.xsl"?>
然后用浏览器直接打开 XML 文件(注意:现代 Chrome/Edge 不再支持内联 XSLT 渲染) -
命令行(推荐):安装
xsltproc(Linux/macOS 自带或通过包管理器安装),执行:xsltproc books.xsl books.xml > output.html -
Python 示例(使用 lxml):
from lxml import etree xml = etree.parse("books.xml") xsl = etree.parse("books.xsl") transform = etree.XSLT(xsl) result = transform(xml) with open("output.html", "wb") as f: f.write(etree.tostring(result, pretty_print=True, method="html"))
常见注意事项
XSLT 虽然逻辑清晰,但容易踩坑:
- XML 和 XSLT 文件编码必须一致(推荐统一用 UTF-8,并在文件头声明)
- 命名空间(namespace)存在时,XSLT 中必须声明并使用前缀,否则匹配失败
- XSLT 1.0 不支持正则、分组排序等高级功能;如需更强能力,考虑升级到 XSLT 2.0/3.0(需 Saxon 等引擎)
- 避免在模板中写大量 HTML 内联样式,建议分离 CSS,保持 XSLT 关注结构转换











