XSLT是可扩展样式表语言转换的缩写,它的核心作用是将一个XML文档转换为另一个XML文档、HTML文档或者纯文本文档,通过定义匹配规则和转换模板,实现XML数据的重组和格式化输出。

XSLT转换XML的基本原理
XSLT的处理过程依赖两个核心文件:待转换的XML源文件,以及定义转换规则的XSLT样式表文件。XSLT解析器会读取XML源文件的结构和内容,同时匹配XSLT样式表中定义的模板规则,按照规则对XML节点进行筛选、排序、重组,最终输出目标格式的内容。
核心组成部分
- XML源文件:存储原始结构化数据,遵循XML语法规范,包含需要转换的所有内容节点
- XSLT样式表:以<xsl:stylesheet>为根节点,内部通过<xsl:template>定义匹配不同XML节点的转换模板
- XSLT解析器:负责执行转换逻辑,浏览器、服务端程序都可以集成XSLT解析能力
XSLT将XML转为HTML的完整实例
下面通过一个学生信息展示的场景,演示完整的转换过程,最终将存储学生信息的XML转换为展示学生列表的HTML表格。
1. 准备XML源文件
首先创建存储学生数据的XML文件,命名为students.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="students.xsl"?>
<students>
<student id="1">
<name>张三</name>
<age>20</age>
<major>计算机科学</major>
<score>92</score>
</student>
<student id="2">
<name>李四</name>
<age>21</age>
<major>软件工程</major>
<score>88</score>
</student>
<student id="3">
<name>王五</name>
<age>19</age>
<major>数据科学</major>
<score>95</score>
</student>
</students>
这里XML文件头部添加了<?xml-stylesheet?>指令,指定了关联的XSLT样式表路径,浏览器加载该XML时会自动执行转换并渲染结果。
2. 编写XSLT样式表文件
创建名为students.xsl的XSLT文件,定义转换规则,将XML中的学生节点转换为HTML表格的行:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 输出格式为HTML -->
<xsl:output method="html" encoding="UTF-8"/>
<!-- 匹配根节点students的模板 -->
<xsl:template match="/students">
<html>
<head>
<title>学生信息列表</title>
<style>
table {
border-collapse: collapse;
width: 80%;
margin: 20px auto;
}
th, td {
border: 1px solid #ccc;
padding: 8px 12px;
text-align: center;
}
th {
background-color: #f0f0f0;
}
</style>
</head>
<body>
<h2 style="text-align: center;">学生信息列表</h2>
<table>
<tr>
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
<th>专业</th>
<th>成绩</th>
</tr>
<!-- 遍历所有student子节点 -->
<xsl:for-each select="student">
<!-- 按成绩降序排序 -->
<xsl:sort select="score" order="descending" data-type="number"/>
<tr>
<td><xsl:value-of select="@id"/></td>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="age"/></td>
<td><xsl:value-of select="major"/></td>
<td><xsl:value-of select="score"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这个XSLT样式表中,首先通过<xsl:output>指定输出为HTML格式,然后匹配/students根节点,生成完整的HTML页面结构,使用<xsl:for-each>遍历所有student节点,通过<xsl:value-of>提取对应节点的内容,还添加了按成绩降序排序的逻辑。
3. 执行转换并查看结果
将students.xml和students.xsl放在同一目录下,用浏览器直接打开students.xml文件,浏览器会自动加载关联的XSLT样式表执行转换,最终渲染出包含学生信息的HTML表格,表格会按照成绩从高到低排列。
如果需要服务端执行转换,也可以使用Java、Python等语言的XSLT解析库实现,以Python为例,使用lxml库的执行代码如下:
from lxml import etree
# 加载XML源文件
xml_tree = etree.parse("students.xml")
# 加载XSLT样式表
xslt_tree = etree.parse("students.xsl")
# 创建转换器
transformer = etree.XSLT(xslt_tree)
# 执行转换
result = transformer(xml_tree)
# 输出转换后的HTML内容
print(str(result))
# 保存为HTML文件
with open("students.html", "w", encoding="UTF-8") as f:
f.write(str(result))
常见问题说明
- 如果XSLT中引用了外部资源,需要保证路径正确,否则会导致转换失败
- XML和XSLT文件的编码需要保持一致,否则可能出现中文乱码问题
- 浏览器对XSLT的支持存在差异,复杂的XSLT逻辑建议在服务端完成转换后输出HTML
XSLTXMLHTMLXML_to_HTML修改时间:2026-06-23 06:18:44