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

DOM4J解析XML, 修改xml的值

1. 引入pom依赖

<dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version>
</dependency>

2. 解析xml, 修改xml节点的值

import org.apache.commons.io.IOUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;public class Dom4jParseUserXmlTest { //业务数据xml格式public static String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +"<DATA>\n" +"    <HEAD>\n" +"        <BIZID>AD03-1713863079</BIZID>\n" +"        <COUNT>1</COUNT>\n" +"        <CONSUMER>app</CONSUMER>\n" +"    </HEAD>\n" +"    <BODY>\n" +"        <ITEM>\n" +"            <CUST_NAME>张三</CUST_NAME>\n" +"            <CUST_SEX>0</CUST_SEX>\n" +"            <CUST_MOBILE>17812345678</CUST_MOBILE>\n" +"        </ITEM>\n" +"    </BODY>\n" +"</DATA>";public static void main(String[] args) { //创建解析器对象SAXReader saxReader=new SAXReader();try { InputStream inputStream = IOUtils.toInputStream(new String(xml), StandardCharsets.UTF_8.name()); Document document = saxReader.read(inputStream);Element rootElement = document.getRootElement();System.out.println("1.------->root:"+rootElement.getName());System.out.println("2.------->获取root子标签列表");List<Element> usersSubElementList = rootElement.elements();for (Element userElement : usersSubElementList) { System.out.println("DATA标签的子标签的名字是"+ userElement.getName());System.out.println("3.------->获取"+ userElement.getName() +"的子标签列表");List<Element> userSubElementList = userElement.elements();for (Element userSubElement : userSubElementList) { if("BIZID".equals(userSubElement.getName())) {//修改节点值userSubElement.setText("111111111111111111111111111");}System.out.println("标签下的子标签名为:"+userSubElement.getName());System.out.println("标签下的子标签文本是:"+userSubElement.getText());}}
//            //获取users标签的第一个标签
//              Element firstUserElement = rootElement.element("user");
//            //第一个user标签的子标签password的文本内容
//              String password = firstUserElement.attributeValue("password");
//              System.out.println(password);} catch (DocumentException e) { e.printStackTrace();}}
}

3. 换个思路, XML转json, 然后解析json

3.1 用 Jackson 库

Jackson 是一个强大的 JSON 处理库,它也支持 XML 到 JSON 的转换。

  1. 添加 Jackson 依赖(Maven):

    <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.15.0</version>
    </dependency>
    <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version>
    </dependency>

  2. 实现代码:

    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;public class XmlToJsonConverter {public static String convertXmlToJson(String xml) throws Exception {// 创建 XmlMapper 实例XmlMapper xmlMapper = new XmlMapper();// 将 XML 字符串解析为 JsonNodeJsonNode node = xmlMapper.readTree(xml.getBytes());// 创建 ObjectMapper 实例ObjectMapper jsonMapper = new ObjectMapper();// 将 JsonNode 转换为 JSON 字符串return jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(node);}public static void main(String[] args) {String xml = "<person><name>John Doe</name><age>30</age></person>";try {String json = convertXmlToJson(xml);System.out.println("JSON Output:\n" + json);} catch (Exception e) {e.printStackTrace();}}
    }

输出:

{"person" : {"name" : "John Doe","age" : "30"}
}

3.2 使用 org.json 库

<dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20231013</version>
</dependency>

代码

        // 示例XML字符串String xmlString= "<person><name>John Doe</name><age>30</age></person>";// 将XML转换为JSONJSONObject jsonObject = XML.toJSONObject(xmlString);String jsonString = jsonObject.toString(4); // 4是缩进空格数,用于美化输出System.out.println(jsonString);

相关文章:

DOM4J解析XML, 修改xml的值

1. 引入pom依赖 <dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version> </dependency> 2. 解析xml, 修改xml节点的值 import org.apache.commons.io.IOUtils; import org.dom4…...

3.16[A]FPGA

FPGA的工作原理是通过配置存储器中的数据来控制可编程逻辑单元和互连资源&#xff0c;从而实现用户定义的逻辑功能。用户可以通过硬件描述语言&#xff08;HDL&#xff09;编写代码&#xff0c;然后通过综合、映射、布局布线等步骤生成配置数据&#xff0c;最后将这些数据加载到…...

ssh转发笔记

工作中又学到了&#xff0c;大脑转不过来 现有主机A&#xff0c;主机B&#xff0c;主机C A能访问B&#xff0c;B能访问C&#xff0c;A不能访问C C上80端口有个服务&#xff0c;现在A想访问这个服务&#xff0c;领导让用ssh转发&#xff0c;研究半天没找到理想的语句&#xf…...

使用OBS进行webRTC推流参考

参考腾讯云官方文档&#xff1a; 云直播 OBS WebRTC 推流_腾讯云 说明非常详细&#xff0c;分为通过WHIP和OBS插件的形式进行推流。 注意&#xff1a;通过OBS插件的形式进行推流需要使用较低的版本&#xff0c;文档里有说明&#xff0c;需要仔细阅读。...

(链表)面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&#xff…...

Python----数据可视化(Pyecharts三:绘图二:涟漪散点图,K线图,漏斗图,雷达图,词云图,地图,柱状图折线图组合,时间线轮廓图)

1、涟漪特效散点图 from pyecharts.globals import SymbolType from pyecharts.charts import EffectScatter from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.globals import ThemeType # 绘制图表 es (EffectScatter(init_optsop…...

正则表达式:贪婪匹配与非贪婪匹配

正则表达式:贪婪匹配与非贪婪匹配 非贪婪匹配 .*?这三个字符的组合就是非贪婪匹配&#xff0c;意思是匹配任意字符直到遇到第一个后面指定的字符&#xff0c;比如.*?_就表示匹配任意字符直到碰到下划线&#xff0c;还可以组合^来表示从头匹配&#xff0c;比如^.*?_就是从头…...

IP风险度自检,互联网的安全“指南针”

IP地址就像我们的网络“身份证”&#xff0c;而IP风险度则是衡量这个“身份证”安全性的重要指标。它关乎着我们的隐私保护、账号安全以及网络体验&#xff0c;今天就让我们一起深入了解一下IP风险度。 什么是IP风险度 IP风险度是指一个IP地址可能暴露用户真实身份或被网络平台…...

数据结构与算法-图论-拓扑排序

前置芝士 概念 拓扑排序&#xff08;Topological Sorting&#xff09;是对有向无环图&#xff08;DAG&#xff0c;Directed Acyclic Graph&#xff09;的顶点进行排序的一种算法。它将图中的所有顶点排成一个线性序列&#xff0c;使得对于图中的任意一条有向边 (u, v)&#x…...

Gan网络公式了解

Gan网络 生成器和判别器是亦敌亦友的关系 对于生成模型&#xff0c;损失函数很难定义->所以我们可以将生成模型的输出交给判别模型进行处理&#xff0c;来分辨好坏。 生成器的损失是通过判别器的输出来计算的&#xff0c;而判别器的输出是一个概率值&#xff0c;我们可以通过…...

解决linux mysql命令 bash: mysql: command not found 的方法

首先得知道mysql命令或mysqladmin命令的完整路径 比如mysql的路径是&#xff1a; /usr/local/mysql/bin/mysql&#xff0c;我们则可以这样执行命令&#xff1a; ln -s /usr/local/mysql/bin/mysql /usr/bin © 著作权归作者所有,转载或内容合作请联系作者 喜欢的朋友记得点…...

微服务存在的问题及解决方案

微服务存在的问题及解决方案 1. 存在问题 1.1 接口拖慢 因为一个接口在并发时&#xff0c;正好执行时长又比较长&#xff0c;那么当前这个接口占用过多的 Tomcat 连接&#xff0c;导致其他接口无法即时获取到 Tomcat 连接来完成请求&#xff0c;导致接口拖慢&#xff0c;甚至…...

【css酷炫效果】纯CSS实现立体纸张折叠动效

【css酷炫效果】纯CSS实现悬浮阴影扩散交互 缘创作背景html结构css样式完整代码基础版进阶版(3d 悬浮效果) 效果图 通过CSS box-shadow与transition属性实现悬浮阴影扩散交互&#xff0c;为元素添加细腻的悬浮反馈。 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;htt…...

案例5_1:单位数码管显示0

文章目录 文章介绍效果图仿真图5_1放置单位数码管 代码5_1.c 文章介绍 效果图 仿真图5_1 复制案例1_2的仿真图&#xff0c;在此基础上修改 注意&#xff1a;栅格大小需要缩小 放置单位数码管 代码5_1.c #include <reg52.h>#define uchar unsigned char #define uint un…...

Linux centos7误删/boot拯救方法

1.进入救援模式 插入CentOS 7安装光盘&#xff0c;重启系统。在开机时按BIOS设置对应的按键&#xff08;通常是F2等&#xff09;&#xff0c;将启动顺序调整为CD - ROM优先。 系统从光盘启动后&#xff0c;选择“Troubleshooting”&#xff0c;然后选择“Rescue a CentOS s…...

操作系统八股文整理(一)

操作系统八股文整理 一、进程和线程的区别二、进程与线程的切换过程一、进程切换进程切换的步骤&#xff1a; 二、线程切换线程切换的步骤&#xff1a; 三、进程切换与线程切换的对比四、上下文切换的优化 三、系统调用一、系统调用的触发二、从用户空间切换到内核空间三、执行…...

20250317笔记本电脑在ubuntu22.04下使用acpi命令查看电池电量

20250317笔记本电脑在ubuntu22.04下使用acpi命令查看电池电量 2025/3/17 18:05 百度&#xff1a;ubuntu查看电池电量 百度为您找到以下结果 ubuntu查看电池电量 在Ubuntu操作系统中&#xff0c;查看电池电量通常可以通过命令行或者图形界面来完成。下面是一些常见的方法&…...

蓝桥杯备考----模拟算法 phone number

嗯。这道题可以在两个和三个数字加-&#xff0c;我们只要随便输出一个奏行 那么&#xff01;我们规范一下&#xff0c;我们尽可能的只在两个数字之间加&#xff0c;但是如果一共奇数个的话&#xff0c;我们就让最后三个成一组&#xff0c;也就是说&#xff0c;我们用的是个小贪…...

【数据分享】2000—2024年我国省市县三级逐月归一化植被指数(NDVI)数据(Shp/Excel格式)

之前我们分享过2000—2024年逐月归一化植被指数&#xff08;NDVI&#xff09;栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;该数据来源于NASA定期发布的MOD13A3数据集&#xff01;很多小伙伴拿到数据后反馈栅格数据不太方便使用&#xff0c;问我们能不…...

算法基础篇(蓝桥杯常考点)

算法基础篇 前言 算法内容还有搜索&#xff0c;数据结构&#xff08;进阶&#xff09;&#xff0c;动态规划和图论 数学那个的话大家也知道比较难&#xff0c;放在最后讲 这期包含的内容可以看目录 模拟那个算法的话就是题说什么写什么&#xff0c;就不再分入目录中了 注意事…...

Python中使用vlc库实现视频播放功能

文章目录 前言1. 环境准备1.1Python安装1.2选择Python开发环境1.3安装必要库 2. 基础播放示例3. 常用播放控制功能4. 事件监听5. 播放网络流媒体6. 结合 GUI 库制作视频播放器&#xff08;以 Tkinter 为例&#xff09; 前言 本教程主要包含打开文件、播放和停止按钮&#xff0…...

蓝桥杯真题——洛谷 Day10 并查集(枚举)

目录 P8651 [蓝桥杯 2017 省 B] 日期问题 P8635 [蓝桥杯 2016 省 AB] 四平方和 P8651 [蓝桥杯 2017 省 B] 日期问题 思路&#xff1a; 使用scanf读入&#xff0c;枚举从1960到2059&#xff0c;若符合题目形式&#xff0c;加入答案&#xff0c; 从小到大输出&#xff1a;存入结…...

微前端 无界wujie

开发环境配置: Node.js 版本 < 18.0.0 pnpm 脚手架示例模版基于 pnpm turborepo 管理项目 如果您的当前环境中需要切换 node.js 版本, 可以使用 nvm or fnm 进行安装. 以下是通过 nvm 或者nvs 安装 Node.js 16 LTS 版本 nvs安装教程 https://blog.csdn.net/glorydx/artic…...

Linux应用:程序运行

kill kill命令的这种用法是向指定的进程发送特定信号编号的信号。信号在操作系统中是一种软件中断机制&#xff0c;用于通知进程发生了某种特定事件或要求进程执行特定操作。​ kill - 信号编号 进程 ID 信号编号的含义&#xff1a;不同的信号编号代表不同的事件或操作。例如…...

【公务员考试】高效备考指南

高效备考指南&#xff1a;从计划制定到心态调整的全面攻略 公务员考试竞争激烈&#xff0c;备考过程既需要科学规划&#xff0c;也需要持之以恒的努力。结合多位高分考生的经验与专业机构的指导&#xff0c;本文整理了一套系统化的备考策略&#xff0c;涵盖目标设定、学习方法…...

基于SpringBoot+Vue3实现的宠物领养管理平台功能一

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会经济的发展和人们生活水平的提高&#xff0c;越来越多的人开始关注并参与到宠物领养中。宠物已经成为许多家庭的重要成员&#xff0c;人们对于宠物的关爱和照顾也日益增加。然而&#xff0c;传统的宠物领养流程存在诸多不便&a…...

ens33没有分配到IPV4问题

方法一&#xff1a;手动为 ens33 接口分配 IP 地址 你能够借助 ip 命令手动给 ens33 接口分配 IP 地址。不过这种方式在系统重启之后就会失效。 步骤 查看网络信息 先查看一下当前网络的子网信息&#xff0c;例如网关地址和子网掩码等&#xff0c;你可以通过路由器管理界面或…...

SpringCloud 学习笔记2(Nacos)

Nacos Nacos 下载 Nacos Server 下载 | Nacos 官网 下载、解压、打开文件&#xff1a; 更改 Nacos 的启动方式 Nacos 的启动模式默认是集群模式。在学习时需要把他改为单机模式。 把 cluster 改为 standalone&#xff0c;记得保存&#xff01; 启动startup.cmd Ubuntu 启动…...

Blender-MCP服务源码4-初始化项目解读

Blender-MCP服务源码4-初始化项目解读 上篇文章针对Blender开发框架完成了一个基础模板的搭建&#xff0c;并在Blender中成功进行了运行&#xff0c;那这个初始化项目中是如何进行页面效果呈现的&#xff0c;尝试手动进行功能精简来拆解项目代码 1-核心知识点 1&#xff09;如…...

基于eNSP的IPV4和IPV6企业网络规划

基于eNSP的IPV4和IPV6企业网络规划 前言网络拓扑设计功能设计技术详解一、网络设备基础配置二、虚拟局域网&#xff08;VLAN&#xff09;与广播域划分三、冗余协议与链路故障检测四、IP地址自动分配与DHCP相关配置五、动态路由与安全认证六、广域网互联及VPN实现七、网络地址转…...