2011-11-13 11 views
3

JAXBについて質問があります。キー値のリストから属性キー=値へ

Element { 
    String name 
    List<Attribute> attributes; 
} 

Attribute { 
    String key 
    String value 
} 
ゲッターとセッターともちろん

、およびJAXB XmlRootElementが含まと:基本的に私が持っているものこれらの2つのクラスがあります。

このから生成された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