XSLT全称为可扩展样式表转换语言,是W3C制定的一种转换XML文档的标准技术,它的核心作用是将一个XML文档按照预设的规则转换为另一个XML文档、HTML文档或者纯文本格式,整个过程不需要修改原始XML文件的内容,只需要编写对应的转换样式表即可。

XSLT的核心概念
XSLT的转换过程依赖三个核心部分:源XML文档、XSLT样式表、转换引擎。源XML文档是待转换的原始数据文件,XSLT样式表定义了转换的具体规则,转换引擎负责读取两者并按照规则输出目标文档。XSLT的语法本身也是基于XML的,所以样式表本身也是一个符合XML规范的文档。
在XSLT中,转换规则主要通过模板匹配来实现,它会使用XPath语法来定位源XML中的节点,然后定义该节点对应的输出内容。XPath是一种用于在XML文档中查找信息的语言,是XSLT定位节点的基础,常见的XPath表达式可以匹配元素、属性、文本等内容。
编写XSLT样式表的基本结构
一个基础的XSLT样式表需要包含XML声明和XSLT命名空间,基本结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 转换规则写在这里 -->
</xsl:stylesheet>
其中<xsl:stylesheet>是根元素,version属性指定XSLT的版本,xmlns:xsl属性声明了XSLT的命名空间,所有XSLT的专属标签都需要加上xsl前缀。
常用XSLT元素说明
| 元素名称 | 作用说明 |
|---|---|
| <xsl:template> | 定义转换模板,通过match属性指定匹配的源XML节点 |
| <xsl:value-of> | 提取匹配节点的文本内容,select属性指定要提取的节点路径 |
| <xsl:for-each> | 遍历匹配的节点集合,对每一个节点执行相同的转换逻辑 |
| <xsl:apply-templates> | 应用匹配当前节点子节点的模板,实现模板的递归调用 |
实际转换案例演示
假设我们有一个存储学生信息的源XML文档,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1">
<name>张三</name>
<age>20</age>
<major>计算机科学</major>
</student>
<student id="2">
<name>李四</name>
<age>21</age>
<major>软件工程</major>
</student>
</students>
现在我们需要把这个XML转换为HTML表格,展示所有学生的信息,对应的XSLT样式表可以这样编写:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 匹配根节点,输出HTML基本结构 -->
<xsl:template match="/">
<html>
<head>
<title>学生信息表</title>
</head>
<body>
<h2>学生信息列表</h2>
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
<th>专业</th>
</tr>
<!-- 遍历所有student节点 -->
<xsl:for-each select="students/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>
上述样式表中,首先匹配根节点输出完整的HTML结构,然后使用<xsl:for-each>遍历所有student节点,对于每个student节点,提取它的id属性以及name、age、major子节点的内容,填充到HTML表格的行中。
如何执行XSLT转换
执行XSLT转换的方式有很多,常见的有以下几种:
- 使用浏览器:现代浏览器都内置了XSLT转换引擎,只需要在源XML文档中添加
<?xml-stylesheet type="text/xsl" href="样式表文件路径"?>处理指令,用浏览器打开XML文件就会自动完成转换并展示结果。 - 使用编程语言的XSLT库:比如Java的javax.xml.transform包、Python的lxml库、PHP的XSL扩展等,都可以在代码中调用转换接口完成XML到目标格式的转换。
- 使用命令行工具:比如xalan、saxon等XSLT处理器,可以通过命令行指令直接执行转换,适合批量处理场景。
如果使用Python的lxml库执行上述转换,代码可以这样写:
from lxml import etree
# 加载源XML文档
xml_doc = etree.parse("students.xml")
# 加载XSLT样式表
xslt_doc = etree.parse("students.xsl")
# 创建XSLT转换器
transform = etree.XSLT(xslt_doc)
# 执行转换
result = transform(xml_doc)
# 输出转换结果
print(str(result))
# 保存结果到HTML文件
with open("students.html", "w", encoding="UTF-8") as f:
f.write(str(result))
注意事项
编写XSLT样式表时需要注意XML的语法规范,所有标签必须正确闭合,属性值需要用引号包裹。如果转换结果不符合预期,可以先检查XPath表达式是否正确匹配到了源XML的节点,再检查输出内容的拼接逻辑是否有问题。另外不同版本的XSLT支持的语法有差异,编写时需要根据使用的转换引擎选择合适的版本。