2013-03-09 104 views
0

我有一个HashMap,我想将其转换为XML文件。这个tutorial demonstrates如何用XStream做到这一点,它的工作原理非常奇妙。但是,就我而言,我不需要将XML解组到映射。因此解组方法变得过分。 XStream中有没有另一种方法来实现我想要执行的操作,而无需实现unmarshall方法。还是有另一个友好的对象来XML api,我可以用它来实现这一目标?如何将地图转换为XML

+0

Java已经建成[JAXB(HTTP://en.wikipedi a.org/wiki/Java_Architecture_for_XML_Binding)。 – 2013-03-09 00:17:53

回答

1

我决定延伸MapConverter并覆盖其名帅方法:

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); 
0

如果你需要实现一半的接口(OO纯粹主义者不寒而栗),最好的办法可能是这样:

public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { 
    throw new UnsupportedOperationException("Write this message"); 
}