【Java Xml】dom4j写入XML

文章目录

概述

官网

读取查看另一篇:链接

前期准备

maven

xml 复制代码
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.36</version>
</dependency>

使用

基础类

java 复制代码
@Data
@AllArgsConstructor
public class Book {
    private String title;
    private String author;
    private int price;

    // getter和setter方法省略
}

写入

main

java 复制代码
// 创建一个Book对象
Book book = new Book("Java Programming", "John Doe", 29);

// 将 Book 对象转为 XML
Document document = createXml(book);

// 保存 XML 到文件
saveXmlToFile(document, "demo/book2222.xml");

方法

java 复制代码
// 将 Book 对象转为 XML
private static Document createXml(Book book) {
    // 创建根元素 <Book>
    Element rootElement = org.dom4j.DocumentHelper.createElement("Book");

    // 为根元素添加子元素 <Title>, <Author>, <Price>
    rootElement.addElement("Title").setText(book.getTitle());
    rootElement.addElement("Author").setText(book.getAuthor());
    rootElement.addElement("Price").setText(String.valueOf(book.getPrice()));

    // 创建 Document 对象
    Document document = org.dom4j.DocumentHelper.createDocument(rootElement);

    return document;
}

// 保存 XML 到文件
private static void saveXmlToFile(Document document, String filePath) throws IOException {
    // 创建输出格式
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");
    // 不写 XML 声明
    format.setSuppressDeclaration(true);
    // 声明后不换行
    format.setNewLineAfterDeclaration(false);
    // 去除空白字符
    format.setTrimText(true);
    // 设置缩进
    format.setIndent(true);
    format.setIndentSize(2);

    // 创建 XMLWriter
    XMLWriter writer = new XMLWriter(new FileWriter(filePath), format);

    // 写入 XML 文件
    writer.write(document);
    writer.close();
}

改造成接口

基础接口

XmlWriteBaseHandler

java 复制代码
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import java.io.FileWriter;
import java.io.IOException;

public interface XmlWriteBaseHandler<T> {
    /**
     * 对象bo转为xml
     *         // 创建根元素 <Book>
     *         Element rootElement = org.dom4j.DocumentHelper.createElement("Book");
     *
     *         // 为根元素添加子元素 <Title>, <Author>, <Price>
     *         rootElement.addElement("Title").setText(book.getTitle());
     *         rootElement.addElement("Author").setText(book.getAuthor());
     *         rootElement.addElement("Price").setText(String.valueOf(book.getPrice()));
     *
     *         // 创建 Document 对象
     *         Document document = org.dom4j.DocumentHelper.createDocument(rootElement);
     *
     *         return document;
     * @param bo
     * @author 
     */
    public Document createXmlDoc(T bo);

    /**
     * 写入xml
     *
     * @param document 文档
     * @param filePath 文件名
     * @return {@link Document }
     * @author 
     */
    public default void writeXml(Document document, String filePath) throws IOException {
        // 创建输出格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        // 不写 XML 声明
        format.setSuppressDeclaration(true);
        // 声明后不换行
        format.setNewLineAfterDeclaration(false);
        // 去除空白字符
        format.setTrimText(true);
        // 设置缩进
        format.setIndent(true);
        format.setIndentSize(2);

        // 创建 XMLWriter
        XMLWriter writer = new XMLWriter(new FileWriter(filePath), format);

        // 写入 XML 文件
        writer.write(document);
        writer.close();
    }
}

使用方式

实现基础接口

java 复制代码
import BO.Book;
import base.XmlWriteBaseHandler;
import org.dom4j.Document;
import org.dom4j.Element;

/**
 * xml写入实现
 *
 */
public class XmlWriteTestHandler implements XmlWriteBaseHandler<Book> {
    @Override
    public Document createXmlDoc(Book book) {
        // 创建根元素 <Book>
        Element rootElement = org.dom4j.DocumentHelper.createElement("Book");

        // 为根元素添加子元素 <Title>, <Author>, <Price>
        rootElement.addElement("Title").setText(book.getTitle());
        rootElement.addElement("Author").setText(book.getAuthor());
        rootElement.addElement("Price").setText(String.valueOf(book.getPrice()));

        // 创建 Document 对象
        Document document = org.dom4j.DocumentHelper.createDocument(rootElement);

        return document;
    }
}

实际调用

java 复制代码
// 数据准备
Book book = new Book("Java Programming", "John Doe", 29);

// 实现接口
XmlWriteBaseHandler<Book> bookHandler = new XmlWriteTestHandler();

// 写入xml
Document xmlDoc = bookHandler.createXmlDoc(book);
bookHandler.writeXml(xmlDoc, "demo/book1.xml");
相关推荐
文丑颜不良啊29 分钟前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang2 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪2 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
用户956256254292 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
愿有所息2 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
威哥爱编程3 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
秋饼3 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
威哥爱编程3 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_967980113 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读3 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习