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; }
原文:https://www.cnblogs.com/mlfz/p/10592799.html