2013-07-02 10 views
5

JAXB tek sınıfa Map içeren değerleri ve <source> ve <target> ait özelliklerini <map> elemanları unmarshal ile mümkün mü aşağıdaki XMLÇocuk öğesi niteliklerini JAXB ile alanlara nasıl bağlarsınız?

<mappings> 
    <map> 
    <source srcAttr="oof">foo</source> 
    <target trgAttr="rab">bar</target> 
    </map> 
    <map> 
    ... 

Verilen?

@XmlRootElement 
class Map { 

    @XmlElement 
    String source; 

    @??? 
    String srcAttr; 

    @XmlElement 
    String target; 

    @??? 
    String trgAttr; 
} 

Kaynak ve hedef için fazladan sınıf oluşturmak istemiyorum.

cevap

2

Evet! 'u @XmlAttribute annotaion ile değiştirin.

Ayrıca, bu yararlı olabilir jaxb example ve bu oracle examples

+0

XML öznitelikleri 'source' ve' target' öğeleri yerine 'map' öğesine yerleştirilir. FYI - MOXy's '@ XmlPath' uzantısını kullanarak bu kullanım durumunu nasıl ele alabileceğinizi buradan öğrenebilirsiniz: http://stackoverflow.com/a/17424618/383861 –

+0

XML özniteliklerini kaynak ve hedef öğeler yerine harita öğesinin içine yerleştiriniz. Udo'nun istediği şey bu gibi görünüyor – Tala

+0

Sadece unmarshalling ile ilgilendiğim için, bu tam olarak istediğim şey! Bu kadar kolay olacağını düşünmemiştim :-) – Udo

4

Not: Ben EclipseLink JAXB (MOXy) kurşun ve JAXB (JSR-222) uzman grubunun bir üyesiyim.

Bu kullanım durumun ele alınması MOXY'nin @XmlPath uzantısını kullanabilirsiniz: Ayrıntılı Bilgi İçin

import javax.xml.bind.annotation.*; 
import org.eclipse.persistence.oxm.annotations.XmlPath; 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
class Map { 

    String source; 

    @XmlPath("source/@srcAttr") 
    String srcAttr; 

    String target; 

    @XmlPath("target/@trgAttr") 
    String trgAttr; 

} 

+2

Bu gerçek lüks ;-) Maalesef javee standardı ile uğraşmak zorundayım – Udo