我正在使用XStream,并且有一个类如下所示的类:
private Map<String, String> data;
我想生成如下的XML输出:
<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
所以我希望map键成为元素。 mapvalue是XML值,我不希望XML包含在<data></data>
之类的元素中。任何人都可以指向执行此操作的示例代码或类似的东西吗?
更新
这只是一个片段,有一个根元素。
更新2
我在下面发布的自定义转换器代码几乎可以使用。我得到一个扁平的结构,但我需要删除外部元素。有什么想法吗?
//this is the result need to remove <data>
<data>
<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
</data>
这是代码
public class MapToFlatConverter implements Converter{
public MapToFlatConverter() {
}
@Override
public boolean canConvert(Class type) {
return Map.class.isAssignableFrom(type);
}
@Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
Map<String, String> map = (Map<String, String>) source;
for (Map.Entry<String, String> entry : map.entrySet()) {
writer.startNode(entry.getKey());
writer.setValue(entry.getValue().toString());
writer.endNode();
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
//not needed at this time
return null;
}
}
答案 0 :(得分:0)
我能够让这个工作。以下SO帖子是我最终做的:custom converter in XStream。我需要从ReflectionConverter扩展:
下一篇文章也有帮助,但是当我尝试这种方法时,context.convertAnother()方法似乎不起作用。所以我在第一篇文章中切换到了这个方法。