【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");
相关推荐
CodeCraft Studio几秒前
国产化PDF处理控件Spire.PDF教程:使用Python批量自动化将PDF转换为黑白(灰度)
python·pdf·自动化·spire.pdf·文档自动化·pdf开发组件·国产化文档组件
web3.08889992 分钟前
1688商品详情API接口深度解析
开发语言·python
幻云20103 分钟前
Python机器学习:从入门到资深
人工智能·python
愿你天黑有灯下雨有伞4 分钟前
高性能Java并发编程:如何优雅地使用CompletableFuture进行异步编排
java
爱吃羊的老虎4 分钟前
从零开始安装到精通的 Jupyter Notebook 完整教程
ide·python·jupyter
indexsunny4 分钟前
互联网大厂Java面试实战:基于电商场景的Spring Boot与微服务技术问答
java·spring boot·微服务·面试·hibernate·电商场景·技术问答
qq_12498707536 分钟前
基于Spring Boot的电影票网上购票系统的设计与实现(源码+论文+部署+安装)
java·大数据·spring boot·后端·spring·毕业设计·计算机毕业设计
无心水7 分钟前
【分布式利器:腾讯TSF】6、TSF可观测性体系建设实战:Java全链路Metrics+Tracing+Logging落地
java·分布式·架构·wpf·分布式利器·腾讯tsf·分布式利器:腾讯tsf
时兮兮时8 分钟前
CALIPSO垂直特征掩膜(VFM)—使用python绘制主类型、气溶胶和云的子类型
笔记·python·calipso
言之。9 分钟前
LangChain 模型模块使用详解
python·langchain·flask