2015-11-03 61 views
5

我使用XStream和有一個類與字段類似如下:可以從List生成平面XML結構的XStream自定義轉換器?

private Map<String, String> data; 

我想產生這樣的XML輸出:

<key1>test data</key1> 
<key2>test data</key2> 
<key3>test data</key3> 

所以我希望地圖的關鍵是元件。 mapvalue是XML值,我不希望將XML包裝在一個元素中,例如<data></data>。任何人都可以指向示例代碼,這樣做,或類似的東西?

UPDATE

這只是一個代碼段,有一個根元素。

更新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; 
    } 

}

+1

有效的XML不能有多個根元素。 – dummy

+0

這只是一個片段。有一個根元素。我只是想讓列表元素顯得平坦。 –

+0

什麼是近票?這似乎是一個SO創建的問題。 –

回答