Java 如何将地图转换为XML

Java 如何将地图转换为XML,java,xml,xstream,Java,Xml,Xstream,我有一个HashMap,我想将其转换为XML文件。这是如何使用XStream实现这一点的,它工作得非常好。但是,在我的例子中,我不需要将XML解组到映射。因此,解组方法变得超级有用。在XStream中是否有其他方法可以在不实现unmarshall方法的情况下完成我想要做的事情。或者,我可以使用XML api的另一个友好对象来实现这一点吗?如果需要实现接口的一半(OO纯粹主义者不寒而栗),最好的方法可能是: public Object unmarshal(HierarchicalStreamRea

我有一个HashMap,我想将其转换为XML文件。这是如何使用XStream实现这一点的,它工作得非常好。但是,在我的例子中,我不需要将XML解组到映射。因此,解组方法变得超级有用。在XStream中是否有其他方法可以在不实现unmarshall方法的情况下完成我想要做的事情。或者,我可以使用XML api的另一个友好对象来实现这一点吗?

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

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

我决定扩展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();
    }
}


}
公共静态类MapEntryConverter扩展了MapConverter{
公共MapEntryConverter(映射器映射器){
超级(制图员);
}
公共布尔canConvert(类clazz){
返回ListMultimap.class.isAssignableFrom(clazz);
}
公共无效封送处理(对象值、HierarchycalStreamWriter编写器、,
编组(上下文){
ListMultimap=(ListMultimap)值;
for(字符串键:map.keys()){
writer.startNode(键);
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);
ListMultimap multimap=LinkedListMultimap.create();
多重映射put(“x”,“1”);
多重映射put(“x”,“2”);
多重映射放置(“y”,“3”);
XStream XStream=newxstream(newdomdriver());
registerConverter(新的MapEntryConverter(xStream.getMapper());
别名(“add”,multimap.getClass());
字符串xml=xStream.toXML(多重映射);
System.out.println(xml);
Java内置了。