XSLT全称为可扩展样式表转换语言,是W3C定义的一种用于转换XML文档的语言标准,它基于XML语法编写,核心作用是将源XML文档的内容按照预设规则转换为目标格式的文档,常见的转换目标包括HTML、纯文本、其他结构的XML等,在数据处理、报表生成、接口数据格式适配等场景中应用广泛。
XSLT的核心组成
XSLT文件本身也是符合XML规范的文件,主要由以下几个核心部分构成:
- 命名空间声明:XSLT文件需要声明XSLT的命名空间,通常为
http://www.w3.org/1999/XSL/Transform,用来标识当前文件是XSLT样式表。 - 模板规则:模板是XSLT的核心执行单元,每个模板匹配源XML中的特定节点,定义该节点转换后的输出内容。
- 匹配模式:通过XPath表达式指定模板要匹配的源XML节点路径。
- 输出指令:使用
<xsl:value-of>、<xsl:for-each>等指令提取源XML的内容并按规则输出。
使用XSLT转换XML的步骤
第一步:准备源XML文档
首先需要一个待转换的XML文件,以下是一个简单的员工信息XML示例,包含多个员工的基本信息:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<id>1001</id>
<name>张三</name>
<department>技术部</department>
<salary>12000</salary>
</employee>
<employee>
<id>1002</id>
<name>李四</name>
<department>产品部</department>
<salary>11000</salary>
</employee>
</employees>
第二步:编写XSLT样式表
根据转换需求编写对应的XSLT文件,以下示例是将上述员工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:output method="html" encoding="UTF-8"/>
<!-- 匹配根节点,输出HTML整体结构 -->
<xsl:template match="/">
<html>
<head>
<title>员工信息表</title>
</head>
<body>
<h2>员工列表</h2>
<table border="1">
<tr>
<th>员工ID</th>
<th>姓名</th>
<th>部门</th>
<th>薪资</th>
</tr>
<!-- 遍历所有employee节点 -->
<xsl:for-each select="employees/employee">
<tr>
<td><xsl:value-of select="id"/></td>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="department"/></td>
<td><xsl:value-of select="salary"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
第三步:执行转换操作
XSLT转换需要通过XSLT处理器完成,常见的处理器有Saxon、Xalan等,也可以在Java、Python等编程语言中调用内置的XSLT处理接口实现转换。以下是使用Java内置API执行转换的示例代码:
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
public class XsltTransformDemo {
public static void main(String[] args) {
try {
// 创建转换器工厂
TransformerFactory factory = TransformerFactory.newInstance();
// 加载XSLT样式表
Source xsltSource = new StreamSource(new File("employee.xsl"));
Transformer transformer = factory.newTransformer(xsltSource);
// 加载源XML
Source xmlSource = new StreamSource(new File("employee.xml"));
// 定义输出结果
Result result = new StreamResult(new File("employee.html"));
// 执行转换
transformer.transform(xmlSource, result);
System.out.println("XML转换完成,结果已输出到employee.html");
} catch (Exception e) {
e.printStackTrace();
}
}
}
第四步:查看转换结果
执行上述代码后,会生成对应的HTML文件,打开后可以看到格式化的员工信息表格,和我们在XSLT中定义的输出结构完全一致。
XSLT常用指令说明
| 指令名称 | 作用说明 |
|---|---|
| <xsl:template> | 定义转换模板,通过match属性指定匹配的源XML节点 |
| <xsl:value-of> | 提取匹配节点的文本内容并输出 |
| <xsl:for-each> | 遍历匹配的节点集合,对每个节点执行相同的转换逻辑 |
| <xsl:if> | 条件判断,满足指定条件时输出对应内容 |
| <xsl:choose> | 多条件分支判断,类似编程语言中的switch-case逻辑 |
注意事项
- XSLT文件的编码需要和源XML的编码保持一致,避免出现乱码问题。
- 匹配节点的XPath表达式需要准确对应源XML的节点层级,否则无法匹配到对应内容。
- 不同版本的XSLT支持的功能略有差异,编写时需要根据处理器的版本选择对应的XSLT版本。