XML ファイルに変換したい HashMap があります。このチュートリアルでは、XStream を使用してこれを行う方法を示しており、見事に機能します。ただし、私の場合、XML をマップにアンマーシャリングする必要はありません。したがって、非整列化メソッドは不要になります。非整列化メソッドを実装せずに、XStream でやりたいことを達成する別の方法はありますか。または、これを達成するために使用できるXML APIへの別のフレンドリーなオブジェクトはありますか?
2746 次
2 に答える
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);
于 2013-03-09T02:04:36.680 に答える
0
インターフェイスの半分を実装する必要がある場合 (オブジェクト指向の純粋主義者は身震いする)、最善の方法はおそらく次のようにすることです。
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
throw new UnsupportedOperationException("Write this message");
}
于 2013-03-09T00:20:59.093 に答える