【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");
相关推荐
卷无止境16 分钟前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境22 分钟前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12326 分钟前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102161 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb001 小时前
一个项目带你入门AI应用开发01
python
0566462 小时前
Python康复训练——常用标准库
开发语言·python·学习
极光代码工作室2 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
昆曲之源_娄江河畔2 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
Leighteen2 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
0566462 小时前
Python康复训练——控制流与函数
开发语言·python·学习