我有一个 HashMap,我想将其转换为 XML 文件。本教程演示了如何使用 XStream 执行此操作,并且效果非常好。但是,就我而言,我不需要将 XML 解组为 Map。因此 unmarshal 方法变得多余。XStream 中是否有另一种方法可以在不实现 unmarshall 方法的情况下完成我想做的事情。或者是否有另一个友好的对象到 XML api 可以用来完成这个?
问问题
2746 次
2 回答
1
我决定扩展一个 MapConverter 并覆盖它的 marshal 方法:
public static class MapEntryConverter extends MapConverter {
public MapEntryConverter(Mapper mapper) {
super(mapper);
}
public boolean canConvert(Class clazz) {
return ListMultimap.class.isAssignableFrom(clazz);
}
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
ListMultimap<String, String> map = (ListMultimap<String, String>) value;
for (String key : map.keys()) {
writer.startNode(key);
writer.setValue(map.get(key).get(0));
writer.endNode();
}
}
}
当我整理我的地图时,我使用这个转换器:
ListMultimap<String, String> multimap = LinkedListMultimap.create();
multimap.put("x", "1");
multimap.put("x", "2");
multimap.put("y", "3");
XStream xStream = new XStream(new DomDriver());
xStream.registerConverter(new MapEntryConverter(xStream.getMapper()));
xStream.alias("add", multimap.getClass());
String xml = xStream.toXML(multimap);
System.out.println(xml);
于 2013-03-09T02:04:36.680 回答
0
如果您需要实现一半的接口(OO 纯粹主义者不寒而栗),最好的方法可能是这样做:
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
throw new UnsupportedOperationException("Write this message");
}
于 2013-03-09T00:20:59.093 回答