Map<String,Object>转换为XML报文的方法

1. 使用 JAXB (Java Architecture for XML Binding)

JAXB 是 Java 标准库的一部分,支持将 Java 对象与 XML 相互转换。虽然 JAXB 主要用于将 Java 对象转换为 XML,但可以通过一些技巧将 Map<String, Object> 转换为 XML。

示例代码

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;public class JAXBExample {public static void main(String[] args) {try {// 创建 MapMap<String, Object> map = new HashMap<>();map.put("name", "John");map.put("age", 30);map.put("isStudent", false);// 将 Map 转换为 XMLString xml = mapToXml(map);System.out.println(xml);} catch (JAXBException e) {e.printStackTrace();}}public static String mapToXml(Map<String, Object> map) throws JAXBException {// 创建 JAXBContextJAXBContext context = JAXBContext.newInstance(MapWrapper.class);// 创建 MarshallerMarshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);// 将 Map 包装为 MapWrapperMapWrapper wrapper = new MapWrapper(map);// 将对象转换为 XMLStringWriter writer = new StringWriter();marshaller.marshal(wrapper, writer);return writer.toString();}// 包装类,用于 JAXB 处理 Mappublic static class MapWrapper {private Map<String, Object> map;public MapWrapper() {}public MapWrapper(Map<String, Object> map) {this.map = map;}public Map<String, Object> getMap() {return map;}public void setMap(Map<String, Object> map) {this.map = map;}}
}

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mapWrapper><map><entry><key>name</key><value>John</value></entry><entry><key>age</key><value>30</value></entry><entry><key>isStudent</key><value>false</value></entry></map>
</mapWrapper>

2. 使用 XStream

XStream 是一个轻量级的库,支持将 Java 对象与 XML 相互转换。它可以直接处理 Map<String, Object>

Maven 依赖

<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.19</version>
</dependency>

示例代码

import com.thoughtworks.xstream.XStream;
import java.util.HashMap;
import java.util.Map;public class XStreamExample {public static void main(String[] args) {// 创建 MapMap<String, Object> map = new HashMap<>();map.put("name", "John");map.put("age", 30);map.put("isStudent", false);// 创建 XStream 实例XStream xstream = new XStream();// 将 Map 转换为 XMLString xml = xstream.toXML(map);System.out.println(xml);}
}

输出

<map><entry><string>name</string><string>John</string></entry><entry><string>age</string><int>30</int></entry><entry><string>isStudent</string><boolean>false</boolean></entry>
</map>

3. 使用 Jackson XML

Jackson 是一个流行的 JSON 处理库,同时也支持 XML 处理。可以通过 Jackson XML 模块将 Map<String, Object> 转换为 XML。

Maven 依赖

<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.13.3</version>
</dependency>

示例代码

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.util.HashMap;
import java.util.Map;public class JacksonXmlExample {public static void main(String[] args) throws Exception {// 创建 MapMap<String, Object> map = new HashMap<>();map.put("name", "John");map.put("age", 30);map.put("isStudent", false);// 创建 XmlMapperXmlMapper xmlMapper = new XmlMapper();// 将 Map 转换为 XMLString xml = xmlMapper.writeValueAsString(map);System.out.println(xml);}
}

输出

<HashMap><name>John</name><age>30</age><isStudent>false</isStudent>
</HashMap>

4. 使用 DOM 或 SAX

如果你需要更底层的控制,可以使用 Java 自带的 DOM 或 SAX API 手动构建 XML。

示例代码(DOM)

import org.w3c.dom.Document;
import org.w3c.dom.Element;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;public class DomExample {public static void main(String[] args) throws Exception {// 创建 MapMap<String, Object> map = new HashMap<>();map.put("name", "John");map.put("age", 30);map.put("isStudent", false);// 将 Map 转换为 XMLString xml = mapToXml(map);System.out.println(xml);}public static String mapToXml(Map<String, Object> map) throws Exception {// 创建 DocumentBuilderDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.newDocument();// 创建根元素Element root = document.createElement("map");document.appendChild(root);// 遍历 Map,创建子元素for (Map.Entry<String, Object> entry : map.entrySet()) {Element element = document.createElement(entry.getKey());element.setTextContent(entry.getValue().toString());root.appendChild(element);}// 将 Document 转换为 XML 字符串TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.setOutputProperty(OutputKeys.INDENT, "yes");DOMSource source = new DOMSource(document);StringWriter writer = new StringWriter();StreamResult result = new StreamResult(writer);transformer.transform(source, result);return writer.toString();}
}

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<map><name>John</name><age>30</age><isStudent>false</isStudent>
</map>

5. 总结

工具优点缺点
JAXBJava 标准库,无需额外依赖需要包装类,对复杂 Map 支持有限
XStream简单易用,支持复杂对象需要额外依赖
Jackson支持 JSON 和 XML,性能好需要额外依赖
DOM/SAX完全控制 XML 生成过程代码量较大,复杂度高

根据你的需求选择合适的工具。如果需要快速实现,推荐使用 XStreamJackson;如果需要标准化,可以使用 JAXB;如果需要完全控制,可以使用 DOM/SAX

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

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

相关文章

基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程

一、Django项目初始化 1.创建Django项目 Django-admin startproject 项目名 2.安装 djangorestframework pip install djangorestframework 解释: Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架&#xff0c;提供了多种工具和库来构建 RESTf…

基于多目标向日葵优化算法(Multi-objective Sunflower Optimization,MOSFO)的移动机器人路径规划研究,MATLAB代码

一、机器人路径规划介绍 移动机器人路径规划是机器人研究的重要分支&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量…

cursor使用经验分享(java后端服务开发向)

前言 cursor是一款基于vscode&#xff0c;并集成AI能力的代码编辑器&#xff0c;其功能包括但不限于代码生成及补全、AI对话&#xff08;能够直接将代码环境作为上下文&#xff09;、即时应用建议等等&#xff0c;是一款面向未来的代码编辑器。 对于vscode&#xff0c;最先想…

【Java学习】异常

一、异常的处理过程 异常类的似复刻变量被throw时&#xff0c;会立即中止当前所在的这层方法&#xff0c;即当层方法里throw异常类似复刻变量之后的语句就不会执行了&#xff0c;如果throw异常语句在当层方法中被try{}包裹&#xff0c;则中止就先发生被包裹在了try{}层&#xf…

双足机器狗开发:Rider - Pi

双足机器狗开发:Rider - Pi https://github.com/YahboomTechnology/Rider-Pi-Robot 项目介绍 Rider - Pi是一款为开发者、教育工作者和机器人爱好者设计的桌面双轮腿式机器人,它基于树莓派CM4核心模块构建,具备多种先进功能和特点: 硬件特性 核心模块:采用树莓派CM4核…

vscode 查看3d

目录 1. vscode-3d-preview obj查看ok 2. vscode-obj-viewer 没找到这个插件&#xff1a; 3. 3D Viewer for Vscode 查看obj失败 1. vscode-3d-preview obj查看ok 可以查看obj 显示过程&#xff1a;开始是绿屏&#xff0c;过了1到2秒&#xff0c;后来就正常看了。 2. vsc…

Nginx 本地配置ssl证书

Nginx 本地配置ssl证书 主要为了本地使用https站点访问测试 本地linux 服务器环境为Centos7 本地安装mkcert证书工具 对于 Debian 或 Ubuntu 系统&#xff0c;你可以使用以下命令安装&#xff1a; sudo apt update sudo apt install mkcert # 验证是否安装成功 mkcert --vers…

Redis相关面试题

Redis相关面试题 缓存三剑客 面试官&#xff1a;什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个一定不存在的数据&#xff0c;如果从存储层查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到 DB 去查询&#xff0c;可能导致 DB 挂掉。这种情况…

Android ChatOn-v1.66.536-598-[构建于ChatGPT和GPT-4o之上]

ChatOn 链接&#xff1a;https://pan.xunlei.com/s/VOKYnq-i3C83CK-HJ1gfLf4gA1?pwdwzwc# 添加了最大无限积分 删除了所有调试信息 语言&#xff1a;全语言支持

机器学习(六)

一&#xff0c;决策树&#xff1a; 简介&#xff1a; 决策树是一种通过构建类似树状的结构&#xff08;颠倒的树&#xff09;&#xff0c;从根节点开始逐步对数据进行划分&#xff0c;最终在叶子节点做出预测结果的模型。 结构组成&#xff1a; 根节点&#xff1a;初始的数据集…

求最小公倍数

求最小公倍数 编程实现&#xff1a; 求最小公倍数。 具体要求&#xff1a; 1、小猫询问“请输入第一个数”&#xff0c;并在列表中求出该数的质因数放入列表A&#xff0c;例如输入12&#xff1b; 2、小猫依次询问“请输入第二个数”&#xff0c;并在列表中求出该数的质因数…

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年&#xff0c;人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角&#xff0c;AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型&#xff0c;从技术背景、应用领域、性能、成本效益等多个方…

C/C++蓝桥杯算法真题打卡(Day1)

一、LCR 018. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; class Solution { public:bool isPalindrome(string s) {int n s.size();// 处理一下s为空字符的情况if (n 0) {return true; // 修正拼写错误}// 定义左右指针遍历字符串int left …

SpringUI高保真动态交互元件库:助力产品原型设计

SpringUI 是一个专为Web设计与开发领域打造的高质量、全面且易于使用的交互元件集合。通过提供一系列预制的、高质量的交互组件&#xff0c;帮助设计师快速构建出功能丰富、界面美观的原型。 ————基础元件&#xff1a; ——————按钮 Button&#xff1a;基础按钮、禁用…

vue+neo4j 四大名著知识图谱问答系统

编号: D039 视频 vueneo4j四大名著知识图谱问答系统 技术架构 vuedjangoneo4jmysql技术实现 功能模块图 问答&#xff1a;基于知识图谱检索、支持图多跳、显示推理路径 姜维的师傅的主公的臣是谁&#xff1a; 马谡 知识图谱&#xff1a;四大名著总共4个图谱 红楼梦图谱 …

学习使用ESP8266进行MQTT通信并在网页上可视化显示

目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…

大模型应用开发学习笔记

Huggingface 下载模型&#xff1a; model_dirr"G:\python_ws_g\code\LLMProject\session_4\day02_huggingface\transformers_test\model\uer\uer\gpt2-chinese-cluecorpussmall\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021…

虚拟卡 WildCard (野卡) 保姆级开卡教程

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 本篇教程为 WildCard 的介绍以及开卡教学&#xff0c;要了解不同平台&#xff08;Grok、Talkatone 等&#xff09;的订阅方式请移步《订阅教程》分类 当我们想要充值国外平台会员时&#xff0c;一般都需要使…

C++实现3D(EasyX)详细教程

一、关于3D 我们看见&#xff0c;这两个三角形是相似的&#xff0c;因此计算很简单 若相对物体的方向是斜的&#xff0c;计算三角函数即可 不会的看代码 二、EasyX简介 initgraph(长,宽) 打开绘图 或initgraph(长,宽…

Qt 进度条与多线程应用、基于 Qt 的文件复制工具开发

练习1&#xff1a;Qt 进度条与多线程应用 题目描述 开发一个基于 Qt 的应用程序&#xff0c;该应用程序包含一个水平进度条&#xff08;QSlider&#xff09;&#xff0c;并且需要通过多线程来更新进度条的值。请根据以下要求完成代码&#xff1a; 界面设计&#xff1a; 使用 QS…