簡體   English   中英

XStream自定義轉換器,可以從List生成平面XML結構?

[英]XStream custom converter that can generate flat XML structure from List?

我正在使用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>類的元素中。 任何人都可以指向執行此操作的示例代碼或類似的東西嗎?

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

}

我能夠讓這個工作。 以下SO帖子是我最終做的: XStream中的自定義轉換器 我需要從ReflectionConverter擴展:

下一篇文章也有所幫助,但是當我嘗試這種方法時,context.convertAnother()方法似乎不起作用。 所以我在第一篇文章中切換到了方法。

Xstream隱式映射作為根元素的屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM