【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");
相关推荐
superlls3 小时前
(定时任务)接上篇:定时任务的分布式执行与分布式锁使用场景
java·分布式·后端
无敌的牛3 小时前
C++复习(1)
java·开发语言·面试
子沫20203 小时前
springboot中server.main.web-application-type=reactive导致的拦截器不生效
java·spring boot·后端
Pluchon3 小时前
硅基计划4.0 算法 二叉树深搜(DFS)
java·数据结构·算法·leetcode·深度优先·剪枝
StarPrayers.4 小时前
用 PyTorch 搭建 CIFAR10 线性分类器:从数据加载到模型推理全流程解析
人工智能·pytorch·python
程序员杰哥4 小时前
UI自动化测试实战:从入门到精通
自动化测试·软件测试·python·selenium·测试工具·ui·职场和发展
SunnyRivers4 小时前
通俗易懂理解python yield
python
mortimer4 小时前
Python 进阶:彻底理解类属性、类方法与静态方法
后端·python
9号达人4 小时前
if-else 优化的折中思考:不是消灭分支,而是控制风险
java·后端·面试