使用的是xstream

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.DomDriver;

import java.util.AbstractMap;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Jack
 * @version 2019年1月17日 上午11:56:28
 */
public class XmlUtils {

    /**
     * xml格式转换为map 如 <root>.....</root>
     * 
     * @param xml
     * @return
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static Map xml2Map(String xml, String root) {
        Map<String, Object> map;
        XStream magicApi = new XStream(new DomDriver());
        magicApi.registerConverter(new MapEntryConverter());
        magicApi.alias(root, Map.class);

        map = (Map) magicApi.fromXML(xml);
        return map;

    }

    /**
     * map转换为XML字符串 如 <root>.....</root>
     * 
     * @param map
     * @param root
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static String map2Xml(Map map, String root) {
        String xml ;
        XStream magicApi = new XStream(new DomDriver());
        magicApi.registerConverter(new MapEntryConverter());
        magicApi.alias(root, Map.class);

        xml = magicApi.toXML(map);
        return xml;

    }

    public static class MapEntryConverter implements Converter {

        @SuppressWarnings("rawtypes")
        public boolean canConvert(Class clazz) {
            return AbstractMap.class.isAssignableFrom(clazz);
        }

        @SuppressWarnings("rawtypes")
        public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {

            AbstractMap map = (AbstractMap) value;
            for (Object obj : map.entrySet()) {
                Map.Entry entry = (Map.Entry) obj;
                writer.startNode(entry.getKey().toString());
                Object val = entry.getValue();
                if (null != val) {
                    writer.setValue(val.toString());
                }
                writer.endNode();
            }

        }

        public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {

            Map<String, String> map = new HashMap<>();

            while (reader.hasMoreChildren()) {
                reader.moveDown();

                String key = reader.getNodeName();

                String value = reader.getValue();
                map.put(key, value);

                reader.moveUp();
            }

            return map;
        }

    }

}