【发布时间】:2010-12-04 23:09:24
【问题描述】:
我正在寻找一个轻量级的 API(最好是单个类)来转换一个
Map<String,String> map = new HashMap<String,String();
转换为 XML,反之亦然,将 XML 转换回Map<String,String>。
示例:
Map<String,String> map = new HashMap<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,“仅核心”就足够了。
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","chris");
map.put("island","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,该示例生成
<map> <entry> <string>name</string> <string>chris</string> </entry> <entry> <string>island</string> <string>faranga</string> </entry> </map> -
好吧,我测试了从 1.2(旧版本反序列化/解组部分失败)到最新版本 1.4.6 的几个版本,并且总是需要像下面我的答案中那样的自定义地图转换器来生成输出想。否则,它会输出 Arjan 在上面的评论中所说的内容。