2014-08-27 102 views
2

我有這樣一個類:如何用Xstream省略標籤?

public class revision{ 
    long number; 
    String comment; 

    ... getters and setters 
} 

,我想XStream的結果給是這樣的:

<revision comment="value of comment"> 
    121556 
</revision> 

然而,由於數字是場它迫使我把它寫在<number>標籤。

我用這個來創建XML:

XStream xstream = new XStream(new DomDriver("UTF-8")); 
xstream.useAttributeFor(Revision.class, "comment"); 

是有可能不顯示的標籤?

回答

2

您需要爲revision類註冊ToAttributedValueConverter。此轉換器可讓您指定應該映射到元素的字符內容的類的單個屬性,並將所有其他屬性映射到該元素的屬性。要做到這一點最簡單的方法是用註釋:

@XStreamConverter(value=ToAttributedValueConverter.class, strings={"number"}) 
public class revision { 
    // class body as before 
} 

,並告訴XStream實例與

xstream.processAnnotations(revision.class); 

閱讀批註有了這個轉換器取代你需要useAttributeFor電話,因爲轉換器會自動使用除了number以外的所有屬性。

如果您不想使用註釋,那麼您可以在XStream實例上使用方法調用來配置轉換器,而只需從xstream中提取各種幫助器並將它們顯式傳遞給構造函數(註釋處理器如果需要,將這些東西自動傳遞給轉換器)

xstream.registerConverter(new ToAttributedValueConverter(
     revision.class, xstream.getMapper(), xstream.getReflectionProvider(), 
     xstream.getConverterLookup(), "number"));