xml与map互转,主要使用dom4j

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.IOException;
import java.io.StringWriter;
import java.util.*; public class XmlUtils { private static final Logger LOGGER = LoggerFactory.getLogger(XmlUtils.class); /**
* @Auther sun
* @DateTime 2019/3/8 下午5:15
* @Description:
* @Param map 生成xml的map数据
* @Param rootName 根结点名称
* @Return: java.lang.String
*/
public static String map2xml(Map<String, Object> map, String rootName) {
Document doc = DocumentHelper.createDocument();
Element rootEle = doc.addElement(rootName);
if (null != map && !map.isEmpty()) { Set<Map.Entry<String, Object>> set = map.entrySet();
Iterator<Map.Entry<String, Object>> iter = set.iterator();
while (iter.hasNext()) {
Map.Entry<String, Object> entry = iter.next();
Element ele = rootEle.addElement(entry.getKey());
ele.setText(String.valueOf(entry.getValue()));
}
} else {
LOGGER.warn("[生成XML]Map为空");
}
StringWriter sw = new StringWriter();
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
try {
XMLWriter xmlWriter = new XMLWriter(sw, format);
xmlWriter.write(doc);
} catch (IOException ex) {
LOGGER.error("[生成XML]生成XML数据失败", ex);
} finally {
try {
sw.close();
} catch (IOException ex) {
LOGGER.error("[生成XML]关闭IO异常", ex);
}
}
return sw.toString();
} /**
* @Auther sun
* @DateTime 2019/3/11 下午1:56
* @Description: xml 转换为 map
* @Param strXML
* @Return: java.util.SortedMap<java.lang.String , java.lang.String>
*/
public static SortedMap<String, String> dom4jXMLParse(String strXML) throws DocumentException {
SortedMap<String, String> smap = new TreeMap<String, String>();
Document doc = DocumentHelper.parseText(strXML);
Element root = doc.getRootElement();
for (Iterator iterator = root.elementIterator(); iterator.hasNext(); ) {
Element e = (Element) iterator.next();
smap.put(e.getName(), e.getText());
}
return smap;
} }

  

java的bean与xml互转主要使用Jaxb(java自带的xml转换工具)

public class JaxbUtils {

    /**
* JavaBean转换成xml.
*
* @param obj
* @return
*/
public static String convertToXml(Object obj) {
return convertToXml(obj, "UTF-8");
} /**
* JavaBean转换成xml.
*
* @param obj bean实体
* @param encoding 默认编码UTF-8
* @return
*/
private static String convertToXml(Object obj, String encoding) {
String result = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (Exception e) {
e.printStackTrace();
} return result;
} /**
* xml转成JavaBean.
*
* @param xml
* @param c
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T converyToJavaBean(String xml, Class<T> c) {
T t = null;
try {
JAXBContext context = JAXBContext.newInstance(c);
Unmarshaller unmarshaller = context.createUnmarshaller();
t = (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (Exception e) {
e.printStackTrace();
} return t;
} }

对与xml要转换的bean类使用注解的方式标注(本例子使用了lombok)

@XmlRootElement(name = "xml") 表示根结点名称
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "xml")
public class CallBackResponse {
/**
* 返回状态码
*/
@XmlElement(name = "return_code")
private String returnCode;
/**
* 返回信息
*/
@XmlElement(name = "return_msg")
private String returnMsg;
/**
* 公众账号ID
*/
@XmlElement
private String appid;
/**
* 商户号
*/
@XmlElement(name = "mch_id")
private String mchId;
/**
* 设备号
*/
@XmlElement(name = "device_info")
private String deviceInfo;
/**
* 随机字符串
*/
@XmlElement(name = "nonce_str")
private String nonceStr;
/**
* 签名
*/
@XmlElement
private String sign;
/**
* 签名类型
*/
@XmlElement(name = "sign_type")
private String signType;
/**
* 业务结果
*/
@XmlElement(name = "result_code")
private String resultCode;
/**
* 错误代码 SUCCESS/FAIL
*/
@XmlElement(name = "err_code")
private String errCode;
/**
* 错误代码描述
*/
@XmlElement(name = "err_code_des")
private String errCodeDes;
/**
* 用户标志
*/
@XmlElement
private String openid;
/**
* 付款银行
*/
@XmlElement(name = "bank_type")
private String bankType;
/**
* 订单金额
*/
@XmlElement(name = "total_fee")
private Integer totalFee;
/**
* 微信平台订单号
*/
@XmlElement(name = "transaction_id")
private String transactionId;
/**
* 商户订单号
*/
@XmlElement(name = "out_trade_no")
private String orderId;
/**
* 支付完成时间
*/
@XmlElement(name = "time_end")
private String timeEnd;
/**
* 交易状态
*/
@XmlElement(name = "trade_state")
private String tradeState;
/**
* 交易状态描述
*/
@XmlElement(name = "trade_state_desc")
private String tradeStateDesc;
/**
* 货币种类
*/
@XmlElement(name = "fee_type")
private String feeType; }

Java的xml与map,与Bean互转的更多相关文章

  1. 007-TreeMap、Map和Bean互转、BeanUtils.copyProperties(A,B)拷贝、URL编码解码、字符串补齐,随机字母数字串

    一.转换 1.1.TreeMap 有序Map 无序有序转换 使用默认构造方法: public TreeMap(Map<? extends K, ? extends V> m) 1.2.Ma ...

  2. XML解析与xml和Map集合的互转

    1.XML的解析.首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径. 代码: public class PropertiesDemo { public ...

  3. java中 数组 list map之间的互转

    三者之间转换关系,一张图清晰呈现. 上代码: 其中的maputils是apache的collection包. package util; import java.util.ArrayList; imp ...

  4. Java JSON、XML文件/字符串与Bean对象互转解析

    前言      在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种.在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML ...

  5. XML转换为Map通用算法实现 Java版本(Stax实现)

    目前项目中需要将XML转换为Map,下面给出了自己的代码实现. 后续将为大家提供Dom版本的实现. 请各路大神给予各种优良实现. 场景: 在项目中需要解析XML文本字符串,需要将XML文本字符串映射为 ...

  6. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  7. xml和map互转工具类

    /** * xml转map工具类 * @author zhangyao * */ public class XmlToMapUtil { /** * xml转map 不带属性 * @param xml ...

  8. 解析xml报文,xml与map互转

    这段时间写了一个关于xml报文的工具类,做一下具体的讲解: xml文本 <NTMMessage version="1.03"> <NTMHeader> &l ...

  9. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

随机推荐

  1. python request 请求https verify=False时warning

    import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.pac ...

  2. 《深入理解java虚拟机》读书笔记——java内存区域和内存溢出异常

    几种内存溢出异常: 堆溢出 原因:创建过多对象,并且GC Roots到对象之间有可达路径. 分两种情况: Memory Leak:无用的对象没有消除引用,导致无用对象堆积.例如<Effictiv ...

  3. 电脑开机出现intel UNDI,PXE-2.1(build 003),是怎么回事?

    restore defaults恢复出厂设置 https://jingyan.baidu.com/article/20b68a88587205796cec6290.html

  4. Django 2.0 新款URL配置详解

    Django2.0发布后,很多人都拥抱变化,加入了2的行列.但是和1.11相比,2.0在url的使用方面发生了很大的变化,下面介绍一下: 一.实例 先看一个例子: from django.urls i ...

  5. hbase版本升级的api对比

    前言 今天来介绍一下,hbase的2.1.0版本升级之后和1.2.6版本的api方法的一些不同之处. hbase的工具类 在介绍hbase的相关的java api之前,这里先介绍一下hbase的工具类 ...

  6. js生成带有logo的二维码并保存成图片下载

    生成二维码,需要依赖jquery,先引入一个jquery,然后需要一个插件改变过了jquery-qrcode.js 插件代码(需要的自己打开看): /*! jquery-qrcode v0.14.0 ...

  7. javascript正则表达式分组捕获理解

    我们先来看一段js代码: var rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/; console.log(rquickExpr.ex ...

  8. JVM、redis缓存适用场景

    1. 数据状态相对稳定:(针对数据本身)数据修改较少. 2. 输出的数据是相对幂等:(针对业务)多次查询期间,数据不变动.如果查询频率过高,缓存可能没有及时更新. 了解一下redis.ehcache. ...

  9. 小A买彩票-(组合数)

    链接:https://ac.nowcoder.com/acm/contest/549/C来源:牛客网 题目描述 小A最近开始沉迷买彩票,并且希望能够通过买彩票发家致富.已知购买一张彩票需要3元,而彩票 ...

  10. Python学习—框架篇之初识Django

    什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的W ...