2011-11-13 86 views
3

我有一個關於JAXB的問題。基本上我有這兩個類:從關鍵值列表屬性鍵=值

Element { 
    String name 
    List<Attribute> attributes; 
} 

Attribute { 
    String key 
    String value 
} 

當然還有getters和setter,以及JAXB XmlRootElement。

從這個生成的XML是:

<element> 
    <attributes> 
     <key>id</key> 
     <value>1</value> 
    </attributes> 
    <name>My Element</name> 
</element> 

但是我正在尋找的是更多的東西是這樣的:

<element id="1"> 
    <name>My Element</name> 
</element> 

也就是說,對於屬性的每個實例,我想關鍵=值(作爲屬性)

這在JAXB中可能嗎?

問候, 莫滕

回答

1

我不認爲它會與列表一起工作。但有使用

  • 地圖和
  • @XmlAnyAttribute替代

你舉的例子:

@XmlRootElement 
    public static class Element 
    { 
    @XmlElement 
    String    name; 

    @XmlAnyAttribute 
    Map<QName, Object> map; 
    } 

    { 
    // 
    Element element = new Element(); 
    element.name = "a wonderful name"; 
    element.map = new HashMap<QName, Object>(); 
    element.map.put(new QName("id"), "1"); 
    element.map.put(new QName("other"), "2"); 
    } 

結果認爲:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<element id="1" other="2"> 
    <name>a wonderful name</name> 
</element> 

最好的問候!

+0

是的,我想我必須這樣。我希望能夠爲它使用XmlAdapter,但似乎沒有辦法(因爲XmlAnyAttribute需要Map 並且不能使用從我的適配器返回的內容)。我最終得到屬性的getter只是返回新的AttributeToMapAdapter()。marshal(_attributes)(其中_attributes是屬性的內部列表)。謝謝! – mortenoh