2013-03-09 69 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"); 
}