使用的是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;
}
}
}
Comments | NOTHING