0

XML ファイルに変換したい HashMap があります。このチュートリアルでは、XStream を使用してこれを行う方法を示しており、見事に機能します。ただし、私の場合、XML をマップにアンマーシャリングする必要はありません。したがって、非整列化メソッドは不要になります。非整列化メソッドを実装せずに、XStream でやりたいことを達成する別の方法はありますか。または、これを達成するために使用できるXML APIへの別のフレンドリーなオブジェクトはありますか?

4

2 に答える 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 に答える