使用Hutool工具包解析、生成XML文件

说明:当我们在工作中需要将数据转为XML文件、或者读取解析XML文件时,使用Hutool工具包中的XMLUtil相关方法是最容易上手的方法,本文介绍如何使用Hutool工具包来解析、生成XML文件。

开始之前,需要导入Hutool工具包的依赖

<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.8.6</version>
</dependency>

XML 转 JavaBean

如下面这个XML文件

<?xml version="1.0" encoding="utf-8"?>
<data>
    <books>
        <book>
            <title>《许三观卖血记》</title>
            <author>余华</author>
            <publish>作家出版社</publish>
        </book>
        <book>
            <title>《罪与罚》</title>
            <author>陀思妥耶夫斯基</author>
            <publish>浙江文艺出版社</publish>
        </book>
        <book>
            <title>《白夜》</title>
            <author>陀思妥耶夫斯基</author>
            <publish>上海译文出版社</publish>
        </book>
    </books>
</data>

经分析,从外至里,我们需要创建以下对象:

(data标签对象,里面包含了books标签对象)

import cn.hutool.core.annotation.Alias;
import lombok.Data;

import java.io.Serializable;

@Data
public class DataBean implements Serializable {
   

    /**
     * 数据包
     */
    @Alias("books")
    private BooksBean books;
}

(books标签对象,里面有book对象,并且是一个集合)

import cn.hutool.core.annotation.Alias;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
public class BooksBean implements Serializable {
   

    /**
     * 书籍列表
     */
    @Alias("book")
    private List<BookBean> books;
}

(book对象,里面是多个属性)

import cn.hutool.core.annotation.Alias;
import lombok.Data;

import java.io.Serializable;

@Data
public class BookBean implements Serializable {
   

    /**
     * 书名
     */
    @Alias("title")
    private String title;

    /**
     * 作者
     */
    @Alias("author")
    private String author;

    /**
     * 出版社
     */
    @Alias("publish")
    private String publish;
}

需要注意,对应属性上面的注解以及注解里面的名称需要与xml中的标签名对应;

解析XML代码;

        // 读取xml文件
        String xml = FileUtil.readString(new File("data.xml"), "UTF-8");

        // 将xml转换为java对象
        Element rootElement = XmlUtil.getRootElement(XmlUtil.parseXml(xml));

        // 使用根节点下的直接 转成对象
        DataBean dataBean = XmlUtil.xmlToBean(rootElement, DataBean.class);

        // 输出对象数据
        System.out.println(dataBean.getBooks().getBooks());

解析完成

在这里插入图片描述

JavaBean 转 XML

对象转XML是相反的过程,先组装数据,成一个对象。然后依次创建节点标签,将数据放入到标签中。

        // 制造数据
        BookBean bookBean = new BookBean();
        bookBean.setTitle("《活着》");
        bookBean.setAuthor("余华");
        bookBean.setPublish("作家出版社");

        // 创建Books对象
        List<BookBean> beans = new ArrayList<>();
        beans.add(bookBean);

        // 创建xml对象
        Document document = XmlUtil.createXml();

        // 创建data节点
        Element data = document.createElement("data");
        document.appendChild(data);

        // 创建books节点
        Element books = document.createElement("books");
        data.appendChild(books);

        // 创建book节点
        Element book = document.createElement("book");
        books.appendChild(book);

        // 填充数据
        for (BookBean bean : beans) {
   
            Element title = document.createElement("title");
            title.setTextContent(bean.getTitle());
            book.appendChild(title);

            Element author = document.createElement("author");
            author.setTextContent(bean.getAuthor());
            book.appendChild(author);

            Element publish = document.createElement("publish");
            publish.setTextContent(bean.getPublish());
            book.appendChild(publish);
        }

        // 将document对象转换为xml字符串
        String xmlStr = XmlUtil.toStr(document);

        // 输出
        System.out.println(xmlStr);

转换成功;

在这里插入图片描述

另外,这里的xml是未格式化的,可以通过下面这个方法,输出格式化后的xml

    private String formatXml(Document document) {
   
        try {
   
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer transformer = tf.newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

            // 将 Document 转换为 Source
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(new StringWriter());

            // 使用 Transformer 对象进行格式化
            transformer.transform(source, result);
            return result.getWriter().toString();
        } catch (Exception e) {
   
            e.printStackTrace();
            return null;
        }
    }

将上面的代码换成如下:

        // 将document对象转换为xml字符串,并格式化
        String xmlStr = formatXml(document);

运行看效果

在这里插入图片描述

总结

使用Hutool工具包解析、生成XML文件,使用的是XmlUtil中的XmlUtil.xmlToBean()、XmlUtil.toStr()等方法,另外还有其他方法可供使用,可自行研究。

在这里插入图片描述

相关推荐

  1. 使用Python的xml.etree.ElementTree模块解析XML文件

    2024-01-30 13:02:02       30 阅读
  2. 使用 hutool工具实现导入导出功能。

    2024-01-30 13:02:02       27 阅读
  3. Hutool工具网络文件下载与文件压缩

    2024-01-30 13:02:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-30 13:02:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-30 13:02:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-30 13:02:02       82 阅读
  4. Python语言-面向对象

    2024-01-30 13:02:02       91 阅读

热门阅读

  1. 嵌入式学习第十三天

    2024-01-30 13:02:02       52 阅读
  2. 【Vue】2-5、Vue 过滤器

    2024-01-30 13:02:02       46 阅读
  3. 数据双向绑定v-modal

    2024-01-30 13:02:02       54 阅读
  4. el-tree setChecked实现父子不联动

    2024-01-30 13:02:02       53 阅读
  5. Qt基础-QDialog对话框使用

    2024-01-30 13:02:02       58 阅读
  6. IOS 计算富文本的高度方法

    2024-01-30 13:02:02       59 阅读
  7. 再学css

    再学css

    2024-01-30 13:02:02      51 阅读
  8. PySimpleGUI界面读取PDF转换Excel

    2024-01-30 13:02:02       55 阅读
  9. 蓝桥杯-岛屿个数-bfs-dfs算法

    2024-01-30 13:02:02       53 阅读
  10. 华为HCIP Datacom H12-831 卷16

    2024-01-30 13:02:02       65 阅读
  11. 蓝桥杯---错误票据

    2024-01-30 13:02:02       55 阅读
  12. 糊涂工具包使用 记录

    2024-01-30 13:02:02       65 阅读
  13. 51单片机点灯

    2024-01-30 13:02:02       53 阅读
  14. Redis:企业级的深入

    2024-01-30 13:02:02       42 阅读
  15. C语言数据结构——单链表

    2024-01-30 13:02:02       72 阅读