Thymeleaf怎么处理XML文档

来源:建站作者:澳门程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《Thymeleaf怎么处理XML文档》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Thymeleaf怎么处理XML文档》有用,将其分享出去将是对创作者最好的鼓励。

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

Thymeleaf怎么处理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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。