【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");
相关推荐
测试-鹏哥18 小时前
要将ITP集成到Jenkins Pipeline中,实现开发发版时自动触发自动化测试
运维·python·测试工具·ci/cd·jenkins
程序员三藏18 小时前
Postman接口测试详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
L.EscaRC18 小时前
Lua语言知识与应用解析
java·python·lua
S7777777S18 小时前
easyExcel单元格动态合并示例
java·excel
清空mega18 小时前
从零开始搭建 flask 博客实验(5)
后端·python·flask
刘个Java18 小时前
对接大疆上云api---实现直播效果
java
用户95451568116218 小时前
== 和 equals 区别及使用方法组件封装方法
java
hashiqimiya18 小时前
html的input的required
java·前端·html
起予者汝也18 小时前
Python基础入门
开发语言·python
snakecy18 小时前
cuda10 cudnn7.5--旧版本
python·学习