XSLT转换XML的核心逻辑是通过编写XSLT样式表定义转换规则,再借助对应的解析器读取XML源文件和XSLT规则,生成目标格式的内容。这种方式不需要手动解析XML节点再拼接结果,规则清晰且易于维护。

XSLT转换XML的核心组成
一次完整的XSLT转换需要三个核心部分:
- XML源文件:需要被转换的原始XML数据,包含待处理的结构化内容
- XSLT样式表:定义转换规则的XML格式文件,使用XSLT命名空间下的元素编写匹配和输出逻辑
- 转换引擎:负责读取源文件和样式表,执行转换逻辑并输出结果的工具,不同编程语言都有对应的实现
完整示例文件说明
1. 待转换的XML源文件
下面是一个简单的员工信息XML文件,后续会将其转换为HTML表格展示:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<id>1001</id>
<name>张三</name>
<department>技术部</department>
<salary>15000</salary>
</employee>
<employee>
<id>1002</id>
<name>李四</name>
<department>产品部</department>
<salary>12000</salary>
</employee>
</employees>
2. XSLT样式表文件
该样式表定义了将员工XML转换为HTML表格的规则,使用xsl:for-each遍历员工节点,输出对应的表格行:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<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>
<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>
3. 转换后的输出结果
执行转换后得到的HTML内容如下,浏览器可以直接渲染为表格:
<html>
<head>
<title>员工信息表</title>
</head>
<body>
<h2>员工列表</h2>
<table border="1">
<tr>
<th>员工ID</th>
<th>姓名</th>
<th>部门</th>
<th>薪资</th>
</tr>
<tr>
<td>1001</td>
<td>张三</td>
<td>技术部</td>
<td>15000</td>
</tr>
<tr>
<td>1002</td>
<td>李四</td>
<td>产品部</td>
<td>12000</td>
</tr>
</table>
</body>
</html>
Java中实现XSLT转换的代码示例
Java标准库自带XSLT转换支持,不需要额外引入第三方依赖,下面是完整的转换实现代码:
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("output.html"));
// 执行转换
transformer.transform(xmlSource, result);
System.out.println("XSLT转换完成,结果已输出到output.html");
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
XSLT常用语法说明
在编写XSLT样式表时,以下几个语法是最常用的:
xsl:template:定义转换模板,通过match属性指定匹配XML的哪个节点xsl:value-of:提取匹配节点的文本内容,select属性指定要提取的节点路径xsl:for-each:遍历匹配的节点集合,对每一个节点执行内部的定义的逻辑xsl:if和xsl:choose:实现条件判断逻辑,根据节点内容输出不同的结果
注意:XSLT样式表本身也是XML格式的文件,因此需要严格遵循XML的语法规范,所有标签必须正确闭合,属性值需要用引号包裹。