Java的xml与map,与Bean互转

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