当前位置: 首页 > news >正文

Springboot 整合dom4j 解析xml 字符串 转JSONObject

前言


本文只介绍使用  dom4j 以及fastjson的 方式, 因为平日使用比较多。老的那个json也能转,而且还封装好了XML,但是本文不做介绍。

正文

①加入  pom 依赖

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

② 工具类  MyXmlUtil.java

import com.alibaba.fastjson.JSONArray;
import org.dom4j.*;
import org.springframework.util.StringUtils;
import java.util.List;/*** @Author: JCccc* @Date: 2022-6-15 16:53* @Description:*/
public class MyXmlUtil {public static void main(String[] args) throws DocumentException {String xmlStr="<dependency>\n" +"            <groupId>org.json</groupId>\n" +"            <artifactId>json</artifactId>\n" +"            <version>20180813</version>\n" +"        </dependency>";String xmlStrNew="<configuration>\n" +"    <settings>\n" +"        <setting name=\"useGeneratedKeys\" value=\"true\"/>\n" +"        <setting name=\"useColumnLabel\" value=\"true\"/>\n" +"        <setting name=\"mapUnderscoreToCamelCase\" value=\"true\"/>\n" +"        <setting name=\"logImpl\" value=\"STDOUT_LOGGING\"/>\n" +"    </settings>\n"+"</configuration>";if (StringUtils.hasLength(xmlStr)) {com.alibaba.fastjson.JSONObject jsonObject2 = MyXmlUtil.documentToJSONObject(xmlStr);System.out.println(jsonObject2);}if (StringUtils.hasLength(xmlStrNew)) {com.alibaba.fastjson.JSONObject jsonObject2 = MyXmlUtil.documentToJSONObject(xmlStrNew);System.out.println(jsonObject2);}}/*** org.dom4j.Document 转  com.alibaba.fastjson.JSONObject** @param xml* @return* @throws DocumentException*/public static com.alibaba.fastjson.JSONObject documentToJSONObject(String xml) throws DocumentException {//加上xml标签是为了获取最外层的标签,如果不需要可以去掉Document document = DocumentHelper.parseText("<xml>" + xml + "</xml>");return elementToJSONObject(document.getRootElement());}/*** org.dom4j.Element 转  com.alibaba.fastjson.JSONObject** @param node* @return*/public static com.alibaba.fastjson.JSONObject elementToJSONObject(Element node) {com.alibaba.fastjson.JSONObject result = new com.alibaba.fastjson.JSONObject();// 当前节点的名称、文本内容和属性// 当前节点的所有属性的listList<Attribute> listAttr = node.attributes();// 遍历当前节点的所有属性for (Attribute attr : listAttr) {result.put(attr.getName(), attr.getValue());}// 递归遍历当前节点所有的子节点// 所有一级子节点的listList<Element> listElement = node.elements();if (!listElement.isEmpty()) {// 遍历所有一级子节点for (Element e : listElement) {// 判断一级节点是否有属性和子节点if (e.attributes().isEmpty() && e.elements().isEmpty()) {// 沒有则将当前节点作为上级节点的属性对待result.put(e.getName(), e.getTextTrim());} else {if (!result.containsKey(e.getName())) {// 判断父节点是否存在该一级节点名称的属性// 没有则创建result.put(e.getName(), new JSONArray());}// 将该一级节点放入该节点名称的属性对应的值中((JSONArray) result.get(e.getName())).add(elementToJSONObject(e));}}}return result;}}

运行一下main方法 ,看看效果:
 

    public static void main(String[] args) throws DocumentException {String xmlStr="<dependency>\n" +"            <groupId>org.json</groupId>\n" +"            <artifactId>json</artifactId>\n" +"            <version>20180813</version>\n" +"        </dependency>";String xmlStrNew="<configuration>\n" +"    <settings>\n" +"        <setting name=\"useGeneratedKeys\" value=\"true\"/>\n" +"        <setting name=\"useColumnLabel\" value=\"true\"/>\n" +"        <setting name=\"mapUnderscoreToCamelCase\" value=\"true\"/>\n" +"        <setting name=\"logImpl\" value=\"STDOUT_LOGGING\"/>\n" +"    </settings>\n"+"</configuration>";if (StringUtils.hasLength(xmlStr)) {com.alibaba.fastjson.JSONObject jsonObject2 = MyXmlUtil.documentToJSONObject(xmlStr);System.out.println(jsonObject2);}if (StringUtils.hasLength(xmlStrNew)) {com.alibaba.fastjson.JSONObject jsonObject2 = MyXmlUtil.documentToJSONObject(xmlStrNew);System.out.println(jsonObject2);}}

效果:
 

{"dependency":[{"groupId":"org.json","artifactId":"json","version":"20180813"}]}

{

    "configuration": [

        {

            "settings": [

                {

                    "setting": [

                        {

                            "name": "useGeneratedKeys",

                            "value": "true"

                        },

                        {

                            "name": "useColumnLabel",

                            "value": "true"

                        },

                        {

                            "name": "mapUnderscoreToCamelCase",

                            "value": "true"

                        },

                        {

                            "name": "logImpl",

                            "value": "STDOUT_LOGGING"

                        }

                    ]

                }

            ]

        }

    ]

}

好了,该篇就到这。 

相关文章:

Springboot 整合dom4j 解析xml 字符串 转JSONObject

前言 本文只介绍使用 dom4j 以及fastjson的 方式&#xff0c; 因为平日使用比较多。老的那个json也能转&#xff0c;而且还封装好了XML&#xff0c;但是本文不做介绍。 正文 ①加入 pom 依赖 <dependency><groupId>dom4j</groupId><artifactId>dom4j…...

网络安全实验——安全通信软件safechat的设计

网络安全实验——安全通信软件safechat的设计 仅供参考&#xff0c;请勿直接抄袭&#xff0c;抄袭者后果自负。 仓库地址&#xff1a; 后端地址&#xff1a;https://github.com/yijunquan-afk/safechat-server 前端地址&#xff1a; https://github.com/yijunquan-afk/safec…...

【MySQL】MySQL的事务

目录 概念 什么是事务? 理解事务 事务操作 事务的特性 事务的隔离级别 事务的隔离级别-操作 概念 数据库存储引擎是数据库底层软件组织&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;使用数据引擎进行创建、查 询、更新和删除数据。 不同的存储引擎提供…...

Java分布式事务(七)

文章目录&#x1f525;Seata提供XA模式实现分布式事务_业务说明&#x1f525;Seata提供XA模式实现分布式事务_下载启动Seata服务&#x1f525;Seata提供XA模式实现分布式事务_转账功能实现上&#x1f525;Seata提供XA模式实现分布式事务_转账功能实现下&#x1f525;Seata提供X…...

二十八、实战演练之定义用户类模型、迁移用户模型类

1. Django默认用户模型类 &#xff08;1&#xff09;Django认证系统中提供了用户模型类User保存用户的数据。 User对象是认证系统的核心。 &#xff08;2&#xff09;Django认证系统用户模型类位置 django.contrib.auth.models.User&#xff08;3&#xff09;父类AbstractUs…...

Java Virtual Machine的结构 3

1 Run-Time Data Areas 1.1 The pc Register 1.2 Java Virtual Machine Stacks 1.3 Heap 1.4 Method Area JVM方法区是在JVM所有线程中共享的内存区域&#xff0c;在编程语言中方法区是用于存储编译的代码、在操作系统进程中方法区是用于存储文本段&#xff0c;在JVM中方法…...

linux ubuntu22 安装neo4j

环境&#xff1a;neo4j 5 ubuntu22 openjdk-17 neo4j 5 对 jre 版本要求是 17 及以上&#xff0c;且最好是 openjdk&#xff0c;使用比较新的 ubuntu 系统安装比较好&#xff0c; centos7 因为没有维护&#xff0c;yum 找不到 openjdk-17了。 官方的 debian 系列安装教程&a…...

模型实战(7)之YOLOv8推理+训练自己的数据集详解

YOLOv8推理+训练自己的数据集详解 最近刚出的yolov8模型确实很赞啊,亲测同样的数据集用v5和v8两个模型训练+预测,结果显示v8在检测精度和准确度上明显强于v5。下边给出yolov8的效果对比图: 关于v8的结构原理在此不做赘述,随便搜一下到处都是。1.环境搭建 进入github进行git…...

火车进出栈问题 题解

来源 卡特兰数 个人评价&#xff08;一句话描述对这个题的情感&#xff09; …~%?..,# *☆&℃$︿★? 1 题面 一列火车n节车厢&#xff0c;依次编号为1,2,3,…,n。每节车厢有两种运动方式&#xff0c;进栈与出栈&#xff0c;问n节车厢出栈的可能排列方式有多少种。 输入…...

Unity学习日记12(导航走路相关、动作完成度返回参数)

目录 动作的曲线与函数 创建遮罩 导航走路 设置导航网格权重 动作的曲线与函数 执行动作&#xff0c;根据动作完成度返回参数。 函数&#xff0c;在代码内执行同名函数即可调用。在执行关键帧时调用。 创建遮罩 绿色为可效用位置 将其运用到Animator上的遮罩&#xff0c;可…...

基于bearpi的智能小车--Qt上位机设计

基于bearpi的智能小车--Qt上位机设计 前言一、界面原型1.主界面2.网络配置子窗口模块二、设计步骤1.界面原型设计2.控件添加信号槽3.源码解析3.1.网络链接核心代码3.2.网络设置子界面3.3.小车控制核心代码总结前言 最近入手了两块小熊派开发板,借智能小车案例,进行鸿蒙设备学…...

汇编语言与微机原理(1)基础知识

前言&#xff08;1&#xff09;本人使用的是王爽老师的汇编语言第四版和学校发的微机原理教材配合学习。&#xff08;2&#xff09;推荐视频教程通俗易懂的汇编语言&#xff08;王爽老师的书&#xff09;&#xff1b;贺老师C站账号网址&#xff1b;&#xff08;3&#xff09;文…...

ASEMI代理瑞萨TW8825-LA1-CR汽车芯片

编辑-Z TW8825-LA1-CR在单个封装中集成了创建多用途车载LCD显示系统所需的许多功能。它集成了高质量的2D梳状NTSC/PAL/SECAM视频解码器、三重高速RGB ADC、高质量缩放器、多功能OSD和高性能MCU。TW8825-LA1-CR其图像视频处理能力包括任意缩放、全景缩放、图像镜像、图像调整和…...

什么是 .com 域名?含义和用途又是什么?

随着网络的发展&#xff0c;网络上出现了各种不同后缀的域名&#xff0c;这些域名的后缀各有不同的含义&#xff0c;也有不同的用途。今天&#xff0c;我们就一起来探讨一下 .com 后缀的域名知识。 .com 域名是一种最常见的顶级域名&#xff0c;它是由美国国家网络信息中心&…...

VueX快速入门(适合后端,无脑入门!!!)

文章目录前言State和Mutations基础简化gettersMutationsActions&#xff08;异步&#xff09;Module总结前言 作为一个没啥前端基础&#xff08;就是那种跳过js直接学vue的那种。。。&#xff09;的后端选手。按照自己的思路总结了一下对VueX的理解。大佬勿喷qAq。 首先我们需要…...

前列腺癌论文笔记

名词解释 MRF: 磁共振指纹打印技术( MR Fingerprinting)是近几年发展起来的最新磁共振技术&#xff0c;以一种全新的方法对数据进行采集、后处理和实现可视化。 MRF使用一种伪随机采集方法&#xff0c;取代了过去为获得个体感兴趣的参数特征而使用重复系列数据的采集方法&…...

Python+Yolov5道路障碍物识别

PythonYolov5道路障碍物识别如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonYolov5道路障碍物识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与…...

全新升级,EasyV 3D高德地图组件全新上线

当我们打开任意一个可视化搭建工具或者搜索数据可视化等关键词&#xff0c;我们会发现「地图」是可视化领域中非常重要的一种形式&#xff0c;对于许多可视化应用场景都具有非常重要的意义&#xff0c;那对于EasyV&#xff0c;地图又意味着什么呢&#xff1f;EasyV作为数字孪生…...

从管理到变革,优秀管理者的进阶之路

作为一位管理者&#xff0c;了解自身需求、企业需求和用户需求是非常重要的。然而&#xff0c;仅仅满足这些需求是不够的。我们还需要进行系统化的思考&#xff0c;以了解我们可以为他人提供什么价值&#xff0c;以及在企业中扮演什么样的角色。只有清晰的自我定位&#xff0c;…...

安装Anaconda3

安装Anaconda3 下载安装文件 可以去官网下载 https://repo.anaconda.com/archive/根据自己的操作系统选择合适的Anaconda版本 我选择的是Anaconda3-2021.05-Linux-x86_64.sh的版本 方法一&#xff1a;可以下载到本地然后在上传到虚拟机 方法二&#xff1a;在终端输入以下…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...