XSLT是可扩展样式表转换语言的缩写,它的核心作用就是读取XML文件的内容,按照预设的规则将XML数据转换为其他格式,最常见的场景就是把XML转换为HTML,方便在网页中展示结构化的数据。

XSLT转换的核心原理
XSLT转换需要两个核心文件配合:一个是存储原始数据的XML源文件,另一个是定义转换规则的XSLT样式表文件。转换引擎会解析XSLT样式表中的模板规则,匹配XML中的对应节点,将节点的内容按照规则嵌入到输出的HTML结构中。
基础概念说明
- XML源文件:存储需要转换的原始结构化数据,标签和属性由业务需求定义
- XSLT样式表:以
<xsl:stylesheet>为根标签,内部定义转换的模板和规则 - 模板匹配:使用
<xsl:template>标签的match属性指定匹配XML中的哪个节点 - 节点取值:使用
<xsl:value-of>标签获取XML节点的文本内容
准备工作:编写XML源文件
首先我们需要准备一个待转换的XML文件,这里以学生信息列表为例,文件名为students.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="students.xsl"?>
<students>
<student>
<id>1001</id>
<name>张三</name>
<age>20</age>
<major>计算机科学</major>
</student>
<student>
<id>1002</id>
<name>李四</name>
<age>21</age>
<major>软件工程</major>
</student>
<student>
<id>1003</id>
<name>王五</name>
<age>19</age>
<major>人工智能</major>
</student>
</students>
这里的<?xml-stylesheet?>指令是可选的,用于指定关联的XSLT文件,浏览器解析XML时会自动加载对应的XSLT完成转换。
编写XSLT样式表文件
接下来编写XSLT样式表,文件名为students.xsl,作用是把上面的学生信息转换为带表格的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" />
<!-- 匹配XML根节点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; text-align: center; }
th { background-color: #f5f5f5; }
</style>
</head>
<body>
<h2 style="text-align: center;">学生信息列表</h2>
<table>
<tr>
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
<th>专业</th>
</tr>
<!-- 遍历所有student节点 -->
<xsl:for-each select="student">
<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>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这个样式表中,<xsl:for-each>标签用于遍历所有student子节点,<xsl:value-of>分别获取每个子节点的文本内容,填充到HTML表格的对应单元格中。
运行转换的两种方式
方式一:浏览器直接解析
如果XML文件中已经通过<?xml-stylesheet?>指定了XSLT文件路径,只需要用浏览器打开students.xml文件,浏览器会自动加载XSLT完成转换,直接展示渲染后的HTML页面。
方式二:使用编程语言执行转换
实际开发中更多是通过后端代码执行转换,这里以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))
运行上述代码后,会生成students.html文件,打开即可看到和浏览器直接解析一致的表格页面。
常见问题说明
- 如果转换后HTML样式不生效,检查XSLT中
<xsl:output>的编码是否和文件编码一致 - XML和XSLT文件的路径需要正确对应,否则解析时会报文件找不到的错误
- 如果需要对转换结果做排序,可以在
<xsl:for-each>中添加<xsl:sort>标签,比如按年龄升序排序可以添加<xsl:sort select="age" order="ascending" />