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

server/2025/3/11 3:49:23/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

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

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

示例代码

java">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"><?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 依赖

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

示例代码

java">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);}
}

输出

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 依赖

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

示例代码

java">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);}
}

输出

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

4. 使用 DOM 或 SAX

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

示例代码(DOM)

java">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"><?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.ppmy.cn/server/174089.html

相关文章

firewalld富规则配置黑名单

1. 屏蔽指定 IP 地址 firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.100 reject"参数说明 --permanent:将规则永久保存,重启后仍然生效。--add-rich-rule:添加一条富规则。rule family=ipv4:指定规则适用于 IPv4 地址。…

可视化大屏出圈密码:地图组件深度解析

01 组件介绍 在数据可视化大屏搭建中&#xff0c;地图组件是使用最频繁且重要的组件之一。它不但能直观展现地理方位相关信息&#xff0c;还能通过与标记点、飞线、图表等各类组件巧妙搭配&#xff0c;达成更加多元、生动的数据呈现效果&#xff0c;在众多行业领域都得到了广泛…

音视频入门基础:RTP专题(16)——RTP封装音频时,音频的有效载荷结构

一、引言 《RFC 3640》和《RFC 6416》分别定义了两种对MPEG-4流的RTP封包方式&#xff0c;这两个文档都可以从RFC官网下载&#xff1a; RFC Editor 本文主要对《RFC 3640》中的音频打包方式进行简介。《RFC 3640》总共有43页&#xff0c;本文下面所说的“页数”是指在pdf阅读…

django中序列化器serializer 的高级使用和需要注意的点

在 Django REST framework(DRF)中,序列化器(Serializer)是一个强大的工具,用于将复杂的数据类型(如 Django 模型实例)转换为 Python 原生数据类型,以便将其渲染为 JSON、XML 等格式,同时也能将接收到的外部数据反序列化为 Django 模型实例。以下将介绍序列化器的高级…

【开源免费】基于SpringBoot+Vue.JS青年公寓服务平台(JAVA毕业设计)

本文项目编号 T 233 &#xff0c;文末自助获取源码 \color{red}{T233&#xff0c;文末自助获取源码} T233&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

自学微信小程序的第十四天

DAY14 1、微信小程序为我们提供了位置API,用于实现获取当前地理位置的功能,调用wx.getLocation()方法,通过该方法的success回调函数获取定位结果。若想使用位置API,需要在微信小程序管理后台的“开发管理-接口设置”页面中申请开通,并且还需要在app.json文件中添加请求用…

qt 常量中有换行符

在Qt中遇到“常量中有换行符”的错误通常是由于编码问题引起的。以下是一些解决这个问题的方法&#xff1a; 设置文件编码为UTF-8 BOM &#xff1a; 打开Qt Creator&#xff0c;进入工具 -> 选项 -> 文本编辑器 -> 行为 -> 默认编码&#xff0c;选择UTF-8&#x…

【每日八股】计算机网络篇(三):IP

目录 DNS 查询服务器的基本流程DNS 采用 TCP 还是 UDP&#xff0c;为什么&#xff1f;默认使用 UDP 的原因需要使用 TCP 的场景&#xff1f;总结 DNS 劫持是什么&#xff1f;解决办法&#xff1f;浏览器输入一个 URL 到显示器显示的过程&#xff1f;URL 解析TCP 连接HTTP 请求页…