XSLT 转换全流程(2025 年最实用版,一篇吃透)
一、什么是“XSLT 转换”?
用一个 XSLT 样式表(.xsl 文件)把一个 XML 文件 彻底变成 另一种格式的过程:
XML 输入 + XSLT 样式表 → 执行转换 → HTML / JSON / XML / 文本 / SVG …
二、4 种最常见的转换方式(2025 年真实使用场景)
| 场景 | 输入 | 输出 | 推荐工具/方式 | 一句话说明 |
|---|---|---|---|---|
| 1. 浏览器直接转换 | XML + | HTML | Firefox、Safari | 最简单,但仅限 XSLT 1.0 |
| 2. 前端 JS 实时转换 | XML + XSL | HTML | XSLTProcessor(所有浏览器) | 2025 年最主流做法 |
| 3. 命令行 / 后端批量转换 | XML + XSL | 任意格式 | Saxon、xsltproc、Java、Python、.NET | 企业级首选 |
| 4. 在线一键转换 | 粘贴或上传 | 任意格式 | xsltfiddle、freeformatter 等 | 调试/学习专用 |
三、实战演示:同一个 XML,用 4 种方式分别转换
输入 XML(books.xml)
<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="b1">
<title>围城</title>
<author>钱钟书</author>
<price>38.00</price>
</book>
<book id="b2">
<title>三体</title>
<author>刘慈欣</author>
<price>69.00</price>
</book>
</library>
XSLT(style.xsl)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<h2>书单</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>书名</th><th>作者</th><th>价格</th>
</tr>
<xsl:for-each select="library/book">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="author"/></td>
<td>¥<xsl:value-of select="price"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
方式 1:浏览器直接转换(Firefox/Safari)
把 XML 第一行改成:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
→ 直接用 Firefox 打开 books.xml 就能看到表格
方式 2:前端 JS 转换(兼容所有浏览器)
<!DOCTYPE html>
<html>
<body>
<button onclick="transform()">点我转换</button>
<div id="result"></div>
<script>
async function transform() {
const xml = await fetch('books.xml').then(r => r.text());
const xsl = await fetch('style.xsl').then(r => r.text());
const xmlDoc = new DOMParser().XMLParser.parseFromString(xml, "text/xml");
const xslDoc = new DOMParser.parseFromString(xsl, "text/xml");
const xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xslDoc);
const resultDocument = xsltProcessor.transformToFragment(xmlDoc, document);
document.getElementById("result").innerHTML = "";
document.getElementById("result").appendChild(resultDocument);
}
</script>
</body>
</html>
方式 3:命令行一键转换(最快)
# 方法A:用 Saxon(推荐,功能最强)
java -jar saxon-he-12.5.jar -s:books.xml -xsl:style.xsl -o:output.html
# 方法B:用 xsltproc(Linux/macOS 自带)
xsltproc style.xsl books.xml > output.html
# 方法C:转成 JSON(XSLT 3.0 + Saxon)
java -jar saxon-he-12.5.jar -s:books.xml -xsl:to-json.xsl
方式 4:在线转换(最省事)
打开下面任一网站 → 粘贴 XML 和 XSLT → 点 Transform:
- https://xsltfiddle.liberty-development.net/
- https://www.freeformatter.com/xsl-transformer.html
四、一键转换神器(2025 推荐)
| 工具 | 支持版本 | 命令/链接 |
|---|---|---|
| Saxon-HE | 1.0~3.0+ | 免费,官网下载 |
| xsltproc | 1.0 | brew install libxslt(macOS) |
| Oxygen XML | 全支持 | 专业编辑器,带可视化转换 |
| VS Code + XSLT | 1.0~3.0 | 装 “XSLT/XPath” 插件即可右键转换 |
五、总结:你现在只需要记住这 3 句话
- 想让所有人(包括手机)都能看 → 用 JavaScript XSLTProcessor
- 想批量、性能高、转 JSON → 用 Saxon(XSLT 3.0)
- 只是快速看个效果 → 打开 Firefox 或 xsltfiddle
需要我现在就把你的某个 XML 立刻转换成 HTML、JSON、CSV 任意格式吗?
直接把 XML 贴出来,30 秒给你成品!