使用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 转换为 SourceDOMSource 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()等方法,另外还有其他方法可供使用,可自行研究。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1688平台商品详情数据的采集|Python实现接口调用【1688平台商品】数据采集

前言 1688平台是阿里巴巴集团推出的B2B电子商务平台。该平台于1999年上线&#xff0c;旨在为国内外买家提供海量优质商品和供应商资源&#xff0c;帮助企业进行采购和销售业务。1688平台主要面向中小型企业和个体工商户&#xff0c;提供了各行各业的产品和服务。 在1688平台上…

编写交互式 Shell 脚本

在日常的系统管理和自动化任务中&#xff0c;使用 Shell 脚本可以为我们节省大量时间和精力。 文章将以输入 IP 为例&#xff0c;通过几个版本逐步完善一个案例。 原始需求 编写一个交互式的 Shell 脚本&#xff0c;运行时让用户可以输入IP地址&#xff0c;并且脚本会将输入…

ASP.NET Core 过滤器 使用依赖项注入

过滤器是 ASP.NET Core 中的特殊组件&#xff0c;允许我们在请求管道的特定阶段控制请求的执行。这些过滤器在中间件执行后以及 MVC 中间件匹配路由并调用特定操作时发挥作用。 简而言之&#xff0c;过滤器提供了一种在操作级别自定义应用程序行为的方法。它们就像检查点&#…

五粮液的“活窖之美”,探寻“大国浓香”的千年奥秘

执笔 | 尼 奥 编辑 | 扬 灵 “川酒甲天下&#xff0c;精华在宜宾。”酒都宜宾已有4000余年酿酒历史&#xff0c;璀璨的白酒文化孕育了有着“大国浓香、和美五粮、中国酒王”金字招牌的传世名酒五粮液。从盛唐“重碧酒”到宋代“姚子雪曲”&#xff0c;再到“五粮液”&…

外部实体注入漏洞

当允许引用外部实体时&#xff0c;会造成外部实体注入&#xff08;XXE&#xff09;漏洞。通过构造恶意 内容&#xff0c;就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站 等危害。本节介绍针对XXE漏洞的检测和防御方法。 5.2.1 简介 根据回显情况&#x…

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch01-2 完整定常系统——杆组RRR

机械原理/机构简图/机构运动学推导/Kmtool.pkg 曲柄滑块机构运动学,五杆机构运动学,七杆机构运动学 本文仅供学习使用,总结很多本现有讲述运动学或动力学书籍后的总结,从矢量的角度进行分析,方法比较传统,但更易理解,并且现有的看似抽象方法,两者本质上并无不同。 2024…

ANAPF有源电力滤波器选型计算——安科瑞赵嘉敏

配电系统中谐波电流的计算涉及很多因素。对于改造项目&#xff0c;可使用专业电能质量分析仪测得所需谐波数据&#xff1b;对于新建项目&#xff0c;设计人员并不能直接获得供电系统的的谐波数据&#xff0c;因此&#xff0c;我司研发人员通过众多不同行业、不同类型的项目&…

图灵之旅--ArrayList顺序表LinkedList链表栈Stack队列Queue

目录 线性表顺序表ArrayList简介ArrayList使用ArrayList的构造ArrayList常见操作ArrayList的遍历ArrayList的扩容机制利用ArrayList洗牌ArrayList的优缺点 链表链表的实现双向链表的实现 LinkedListLinkedList引入LinkedList的使用LinkedList的构造LinkedList的常用方法介绍Lin…

Flink问题解决及性能调优-【Flink根据不同场景状态后端使用调优】

Flink 实时groupby聚合场景操作时&#xff0c;由于使用的是rocksdb状态后端&#xff0c;发现CPU的高负载卡在rocksdb的读写上&#xff0c;导致上游算子背压特别大。通过调优使用hashmap状态后端代替rocksdb状态后端&#xff0c;使吞吐量有了质的飞跃&#xff08;20倍的性能提升…

华为手表开发:WATCH 3 Pro(5)点击按钮弹窗

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;5&#xff09;点击按钮弹窗 初环境与设备 创建项目认识目录结构 修改首页 -> 新建按钮 “ 按钮 ” 文件名&#xff1a;**index.hml** 引用包&#xff1a;‘system.prompt’点击结果 初 鸿蒙可穿戴开发 希望能写一些简…

Spring:JDBCTemplate 的源码分析

一&#xff1a;JdbcTemplate的简介 JdbcTemplate 是 Spring Template设置模式中的一员。类似的还有 TransactionTemplate、 MongoTemplate 等。通过 JdbcTemplate 我们可以使得 Spring 访问数据库的过程简单化。 二&#xff1a;执行SQL语句的方法 1&#xff1a;在JdbcTempla…

手把手教你使用Python打造绚丽的词云图

目录 一、引言 二、环境准备 三、基本流程 四、代码实现 五、进阶技巧与优化 六、总结 一、引言 在信息时代&#xff0c;数据可视化已经成为信息传递的重要手段。词云图作为数据可视化的一种形式&#xff0c;能够直观地展示文本数据中的关键词和重要信息。通过使用Pytho…