dom4j实现xml转map,xml转json字符串

 dom4j依赖包

        <!--dom4j--><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>

map转为json字符串方法很多,这里使用fastjson

        <!--fastjson 版本1.2.78是Fastjson在发布时的最后一个支持Java 1.7的版本--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version></dependency>

dom4j实现xml转map,再使用 fastjson 将map转为json字符串

package com.study;import com.alibaba.fastjson.JSON;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;public class Test {public static void main(String[] args) throws Exception {String xml = "<sites><site><name>RUNOOB</name><url>www.runoob.com</url></site><site><name>Google</name><url>www.google.com</url></site><site><name>Facebook</name><url>www.facebook.com</url></site></sites>";Map<String, Object> map = xml2map(xml);String json = JSON.toJSONString(map);System.out.println(json);}/*** xml转map 不带属性*/public static Map<String, Object> xml2map(String xml) throws DocumentException {// xml必须有一个根节点xml = "<root>" + xml + "</root>";Document document = DocumentHelper.parseText(xml);Element root = document.getRootElement(); //根节点Map<String, Object> map = xml2map(root);return map;}/*** xml转map 不带属性* 如果是兄弟元素,并且兄弟元素的标签相同,那么这些相同名称的兄弟需要合并为一个数组*/private static Map<String, Object> xml2map(Element element) {Map<String, Object> map = new LinkedHashMap<>();List<Element> list = element.elements(); //获取所有子节点if (list.size() > 0) { //有子节点for (Element iter : list) { //遍历所有子节点List<Object> mapList;if (iter.elements().size() > 0) { //子节点还有子节点Map<String, Object> m = xml2map(iter); //递归调用if (map.get(iter.getName()) != null) { //标签名称已经存在,说明是一个数组结构Object obj = map.get(iter.getName());if (obj instanceof List) { //标签的值是数组结构,取出数组添加新的元素mapList = (List) obj; //取出旧值mapList.add(m); //放入新值} else {mapList = new ArrayList<>();mapList.add(obj); //放入旧值mapList.add(m); //放入新值}map.put(iter.getName(), mapList);} else {map.put(iter.getName(), m);}} else { //子节点无子节点if (map.get(iter.getName()) != null) { //标签名称已经存在,说明是一个数组结构Object obj = map.get(iter.getName());if (obj instanceof List) { //标签的值是数组结构,取出数组添加新的元素mapList = (List) obj; //取出旧值mapList.add(iter.getText()); //放入新值} else {mapList = new ArrayList<>();mapList.add(obj); //放入旧值mapList.add(iter.getText()); //放入新值}map.put(iter.getName(), mapList);} else {map.put(iter.getName(), iter.getText());}}}}return map;}}

效果如下:

<sites><site><name>RUNOOB</name><url>www.runoob.com</url></site><site><name>Google</name><url>www.google.com</url></site><site><name>Facebook</name><url>www.facebook.com</url></site>
</sites>

xml转换为json后效果

{"sites": {"site": [{"name": "RUNOOB","url": "www.runoob.com"},{"name": "Google","url": "www.google.com"},{"name": "Facebook","url": "www.facebook.com"}]}
}

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

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

相关文章

【Linux系统】—— 基本指令(二)

【Linux系统】—— 基本指令&#xff08;二&#xff09; 1 「alias」命令1.1 「ll」命令1.2 「alias」命令 2 「rmdir」指令与「rm」指令2.1 「rmdir」2.2 「rm」2.2.1 「rm」 删除普通文件2.2.2 「rm」 删除目录2.2.3 『 * 』 通配符 3 「man」 指令4 「cp」 指令4.1 拷贝普通…

Pytorch cuda版本选择(高效简洁版)

简而言之 Pytorch cuda版本选择 只需要低于cuda驱动版本即可&#xff0c;cuda驱动版本查看命令是nvidia-smi, nvcc -V 是runtimeapi版本可以不用管 1.只要看cuda驱动版本 安装pytorch 选择cuda版本&#xff0c;只要看你电脑cuda驱动版本即可。 2.选择依据 pytorch中cuda版本只…

Flink API 的层次结构

Apache Flink 提供了多层 API&#xff0c;每层 API 针对不同的抽象层次和用途&#xff0c;使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明&#xff1a;

前端使用PDF.js把返回的base64或二进制文件流格式,实现pdf文件预览

pdf文件预览 简单了解PDF.js代码实现首先&#xff0c;引入依赖实现预览逻辑 简单了解PDF.js PDF.js是一个JavaScript库&#xff0c;可在浏览器中无插件显示PDF文件&#xff0c;提供缩放、翻页、文本搜索等功能。本文介绍了其基本使用方法和示例代码&#xff0c;如添加翻页和搜…

GPU集群上分布式训练大模型

总结一下如何在超算系统上进行预训练大模型的分布式训练 / 微调&#xff0c;文中代码已上传至 github 实验环境 集群1&#xff1a;国家广州超算 星逸A800智能AI集群 GPU&#xff1a;8 * Nvdia Tesla-A800 80G显存 CPU&#xff1a;2 * 28核 Intel Xeon Gold 6348 内存&#xff…

量化交易系统开发-实时行情自动化交易-数据采集流程

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来说说数据采集流程&#xff0c;后…

智能存储解决方案:探索 TDengine 的多级存储功能

在当今数据驱动的时代&#xff0c;如何高效地存储和管理海量数据已成为企业面临的一大挑战。为了应对这一需求&#xff0c;TDengine Enterprise 不仅支持使用对象存储&#xff08;S3&#xff09;&#xff0c;还早已引入了独特的多级存储功能。这一功能不仅能够降低存储成本&…

python爬虫自动库DrissionPage保存网页快照mhtml/pdf/全局截图/打印机另存pdf

目录 零一、保存网页快照的三种方法二、利用打印机保存pdf的方法 零 最近星球有人问如何使用页面打印功能&#xff0c;另存为pdf 一、保存网页快照的三种方法 解决方案已经放在星球内&#xff1a;https://articles.zsxq.com/id_55mr53xahr9a.html当然也可以看如下代码&…

使用 Visual Studio Installer 彻底卸载 Visual Studio方法与下载

使用 VisualStudioUninstaller 卸载 Visual Studio 的详细步骤&#xff08;以管理员权限运行&#xff09; 步骤 1&#xff1a;下载并解压 VisualStudioUninstaller 访问下载工具。 点击下载 解压下载的文件到本地目录&#xff0c;例如&#xff1a;C:\VSUninstaller。 步骤 …

Swift 开发教程系列 - 第12章:协议与协议扩展

协议&#xff08;Protocol&#xff09;是 Swift 的一种重要特性&#xff0c;它定义了实现特定功能的方法、属性或其他要求。通过协议&#xff0c;可以将行为定义从具体实现中分离&#xff0c;使代码更具可读性和扩展性。Swift 的协议支持协议扩展&#xff0c;这一特性允许我们为…

pytorch中model.cuda()的使用

文章目录 前言一、model.cuda()是什么&#xff1f;二、使用步骤1. 检查GPU是否可用2. 选择设备3. 移动模型到选定设备4. 确保数据和模型在同一设备上 三、注意事项总结 前言 本文旨在详细解释在PyTorch框架中model.cuda()方法的使用&#xff0c;以及与之相关的torch.cuda.devi…

Redis 中 Bitmap 原理和应用

Bitmap Redis中的Bitmap&#xff08;位图&#xff09;是一种较为特殊数据类型&#xff0c;它以最小单位bit来存储数据&#xff0c;我们知道一个字节由 8个 bit 组成&#xff0c;和传统数据结构用字节存储相比&#xff0c;这使得它在处理大量二值状态&#xff08;true、false 或…

文件工具类

isImage(MultipartFile file) 检查文件是否是图片类型isExcel(MultipartFile file) 检查文件是否是excel类型checkFileType(MultipartFile file, String... type) 检查文件是否是指定的类型uploadFile(MultipartFile file) 上传文件downloadFile(HttpServletResponse response,…

elementUI 点击弹出时间 date-picker

elementUI的日期组件&#xff0c;有完整的UI样式及弹窗&#xff0c;但是我的页面不要它的UI样式&#xff0c;点击的时候却要弹出类似的日期选择器&#xff0c;那怎么办呢&#xff1f; 以下是elementUI自带的UI风格&#xff0c;一定要一个输入框来触发。 这是我的项目中要用到的…

微软日志丢失事件敲响安全警钟

NEWS | 事件回顾 最近&#xff0c;全球最大的软件公司之一——微软&#xff0c;遭遇了一场罕见的日志丢失危机。据报告&#xff0c;从9月2日至9月19日&#xff0c;持续长达两周的时间里&#xff0c;微软的多项核心云服务&#xff0c;包括身份验证平台Microsoft Entra、安全信息…

2021-04-22 51单片机玩转点阵

理论就不赘述了,网络上多得很,直接从仿真软件感性上操作认识点阵,首先打开ISIS仿真软件,放置一个点阵和电源与地线就可以开始了;由点阵任何一脚连线到地线,另一边对应的引脚就连接到电源,如图:点击运行看是否点亮?看到蓝色与红色的点表示电源正常但是没有任何亮点,这时对调一下…

(十三)JavaWeb后端开发——MySQL2

目录 1.DQL数据查询语言 1.1基本查询 1.2条件查询 where关键字 1.3分组查询 1.4排序查询 1.5分页查询 2.多表设计 3.多表查询——联查 4.多表查询——子查询​ 5.MySQL 事务 6.事务管理&#xff08;事务进阶&#xff09; 7.MySQL 索引 1.DQL数据查询语言 分为五大…

Ubuntu系统电脑没有WiFi适配器

电脑安装了Ubuntu20.04后发现没办法连接WiFi,也找不到WiFi图标,一般来说是因为Ubuntu系统没有网卡驱动,安装一下即可 解决办法如下: 先用网线或者手机开热点连接到到电脑,让电脑有网络可以使用.终端执行更新命令sudo apt updatesudo apt-get install bcmwl-kernel-source 执行s…

恭喜!2024年度大连市科技人才创新、科技人才创业项目拟立项公示!

精选SCI/SSCI/EI SCI&EI ●IEEE 1区TOP 计算机类&#xff08;含CCF&#xff09;&#xff1b; ●EI快刊&#xff1a;最快1周录用&#xff01; 知网(CNKI)、谷歌学术期刊 ●7天录用-检索&#xff08;100%录用&#xff09;&#xff0c;1周上线&#xff1b; 免费稿件评估 …

Spring Boot 接口与单元测试

一、引言 在现代软件开发中&#xff0c;构建高质量的应用是至关重要的目标。Spring Boot 作为一种流行的 Java 开发框架&#xff0c;为快速构建企业级应用提供了强大的支持。然而&#xff0c;仅仅依靠开发过程中的调试是远远不够的&#xff0c;单元测试作为一种有效的质量保障手…