Thymeleaf是Java生态中广泛使用的模板引擎,默认支持HTML、XML、TEXT等多种模板类型,处理XML文档是其原生支持的能力之一,不需要额外引入特殊依赖即可实现XML的解析、渲染和生成。通过合理的配置和模板编写,可以高效完成XML数据填充、结构转换等操作。

环境准备
如果是Spring Boot项目,首先需要在pom.xml中引入Thymeleaf基础依赖,该依赖已经包含XML模板处理的相关能力:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
如果是非Spring Boot项目,直接引入Thymeleaf核心依赖即可:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
配置Thymeleaf支持XML模板
Thymeleaf默认会识别模板的后缀,处理XML文档时需要将模板的后缀设置为.xml,同时配置对应的模板解析器。在Spring Boot项目中可以通过配置类自定义模板解析规则:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
@Configuration
public class ThymeleafXmlConfig {
@Bean
public ClassLoaderTemplateResolver xmlTemplateResolver() {
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
// 设置模板前缀,对应resources目录下的xml-templates文件夹
resolver.setPrefix("xml-templates/");
// 设置模板后缀为xml
resolver.setSuffix(".xml");
// 设置模板模式为XML
resolver.setTemplateMode("XML");
// 设置编码
resolver.setCharacterEncoding("UTF-8");
// 设置优先级,数值越小优先级越高
resolver.setOrder(1);
return resolver;
}
}
如果是非Spring Boot项目,手动初始化模板引擎时也需要指定XML模式:
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
public class XmlTemplateEngineUtil {
public static TemplateEngine getXmlTemplateEngine() {
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("xml-templates/");
resolver.setSuffix(".xml");
resolver.setTemplateMode("XML");
resolver.setCharacterEncoding("UTF-8");
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);
return templateEngine;
}
}
编写XML模板文件
在resources目录下的xml-templates文件夹中创建user_list.xml模板,模板中可以使用Thymeleaf的标准表达式处理数据:
<?xml version="1.0" encoding="UTF-8"?>
<userList>
<!-- 遍历用户列表 -->
<th:block th:each="user : ${userList}">
<user>
<id><th:block th:text="${user.id}"></th:block></id>
<name><th:block th:text="${user.name}"></th:block></name>
<age><th:block th:text="${user.age}"></th:block></age>
<!-- 条件判断:年龄大于18标记为成年 -->
<th:block th:if="${user.age > 18}">
<status>成年</status>
</th:block>
<th:block th:unless="${user.age > 18}">
<status>未成年</status>
</th:block>
</user>
</th:block>
</userList>
注意XML模板中所有的Thymeleaf标签都需要正确闭合,同时XML的语法要求严格,标签必须成对出现,属性需要加引号。
渲染XML文档
Spring Boot项目中的渲染方式
创建对应的Controller,将用户数据传入模板并渲染返回XML结果:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/xml")
public class XmlController {
@GetMapping("/userList")
@ResponseBody
public String getUserListXml(Model model) {
List<User> userList = new ArrayList<>();
userList.add(new User(1, "张三", 20));
userList.add(new User(2, "李四", 16));
userList.add(new User(3, "王五", 22));
model.addAttribute("userList", userList);
// 返回渲染后的XML字符串,模板名称为user_list,对应user_list.xml
return "user_list";
}
// 内部用户类
public static class User {
private Integer id;
private String name;
private Integer age;
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() { return id; }
public String getName() { return name; }
public Integer getAge() { return age; }
}
}
非Spring Boot项目中的渲染方式
直接使用之前初始化的模板引擎渲染XML:
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import java.util.ArrayList;
import java.util.List;
public class XmlRenderTest {
public static void main(String[] args) {
TemplateEngine engine = XmlTemplateEngineUtil.getXmlTemplateEngine();
Context context = new Context();
List<User> userList = new ArrayList<>();
userList.add(new User(1, "张三", 20));
userList.add(new User(2, "李四", 16));
userList.add(new User(3, "王五", 22));
context.setVariable("userList", userList);
// 渲染模板,模板名称为user_list,对应user_list.xml
String xmlResult = engine.process("user_list", context);
System.out.println(xmlResult);
}
public static class User {
private Integer id;
private String name;
private Integer age;
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() { return id; }
public String getName() { return name; }
public Integer getAge() { return age; }
}
}
注意事项
- XML模板必须严格遵循XML语法规范,所有标签必须正确闭合,属性值需要加引号,否则Thymeleaf解析时会报错。
- Thymeleaf的
th:block标签是空标签,不会在最终渲染的XML中输出,适合用来做循环、条件判断等逻辑操作,不会破坏XML结构。 - 如果XML中需要输出特殊字符,比如<、>、&,需要在模板中做好转义,避免生成的XML格式错误。
- 当处理大体积的XML文档时,建议合理控制模板的复杂度,避免过多的逻辑判断影响渲染性能。
ThymeleafXML处理模板引擎Spring_Boot修改时间:2026-07-08 07:51:33