如何将XML转换为java.util.Map,反之亦然
发布时间:2020-12-16 02:00:03 所属栏目:百科 来源:网络整理
导读:我正在搜索一个轻量级API(最好是单个类)来转换 MapString,String map = new HashMapString,String(); 到xml,反之亦然,将XML转换回Map。 例: MapString,String();map.put("name","chris");map.put("island","faranga");MagicAPI.toXML(map,"root"); 结果:
我正在搜索一个轻量级API(最好是单个类)来转换
Map<String,String> map = new HashMap<String,String(); 到xml,反之亦然,将XML转换回Map。 例: Map<String,String(); map.put("name","chris"); map.put("island","faranga"); MagicAPI.toXML(map,"root"); 结果: <root> <name>chris</chris> <island>faranga</island> </root> 然后回来: Map<String,String> map = MagicAPI.fromXML("..."); 我不想使用JAXB或JSON conversion API.它不必照顾嵌套地图或属性或任何其他,只是那个简单的情况。 编辑:我创建了一个工作副本&粘贴样品。感谢fvu和Michal Bernhard。 Download latest XStream framework,’core only’就够了。 Map<String,Object> map = new HashMap<String,Object>(); map.put("name","faranga"); // convert to XML XStream xStream = new XStream(new DomDriver()); xStream.alias("map",java.util.Map.class); String xml = xStream.toXML(map); // from XML,convert back to map Map<String,Object> map2 = (Map<String,Object>) xStream.fromXML(xml); 不需要转换器或任何其他。只是xstream-x.y.z.jar就够了。
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 java.util.AbstractMap; import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String,String>(); map.put("name","chris"); map.put("island","faranga"); XStream magicApi = new XStream(); magicApi.registerConverter(new MapEntryConverter()); magicApi.alias("root",Map.class); String xml = magicApi.toXML(map); System.out.println("Result of tweaked XStream toXml()"); System.out.println(xml); Map<String,String> extractedMap = (Map<String,String>) magicApi.fromXML(xml); assert extractedMap.get("name").equals("chris"); assert extractedMap.get("island").equals("faranga"); } public static class MapEntryConverter implements Converter { public boolean canConvert(Class clazz) { return AbstractMap.class.isAssignableFrom(clazz); } 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>(); while(reader.hasMoreChildren()) { reader.moveDown(); String key = reader.getNodeName(); // nodeName aka element's name String value = reader.getValue(); map.put(key,value); reader.moveUp(); } return map; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |