2016-01-21 95 views
1

我試圖解組下面的XML不同的對象:組XML取決於屬性使用JAXB

<calcElement partname="driver"> 
    <driverXs>300.00</driverXs> 
    <seq>1</seq> 
</calcElement> 
<calcElement partname="ratingData"> 
    <baseMiles>6000</baseMiles> 
    <vehicleGroup>15</vehicleGroup> 
    <documentVersion>4</documentVersion> 
</calcElement> 

我有以下類,它們代表2以上calcElement的實例:

public abstract class CalcElement { 

    private String partName; 

    @XmlAttribute 
    public String getPartName() { 
     return partName; 
    } 

    public void setPartName(String partName) { 
     this.partName = partName; 
    } 
} 

public class DriverCalcElement extends CalcElement { 
    private String driverXs; 
    private String seq; 

    public String getDriverXs() { 
     return driverXs; 
    } 

    public void setDriverXs(String driverXs) { 
     this.driverXs = driverXs; 
    } 

    public String getSeq() { 
     return seq; 
    } 

    public void setSeq(String seq) { 
     this.seq = seq; 
    } 
} 

public class RatingDataCalcElement extends CalcElement { 
    private String baseMiles; 
    private String vehicleGroup; 
    private String documentVersion; 

    public String getBaseMiles() { 
     return baseMiles; 
    } 

    public void setBaseMiles(String baseMiles) { 
     this.baseMiles = baseMiles; 
    } 

    public String getVehicleGroup() { 
     return vehicleGroup; 
    } 

    public void setVehicleGroup(String vehicleGroup) { 
     this.vehicleGroup = vehicleGroup; 
    } 

    public String getDocumentVersion() { 
     return documentVersion; 
    } 

    public void setDocumentVersion(String documentVersion) { 
     this.documentVersion = documentVersion; 
    } 
} 

但是,我無法制定註解的組合,以添加到類中以成功解組(編組)此代碼。

我需要添加哪些類才能使其工作?

+0

你可以用'XmlAdapter'來做到這一點:http://blog.bdoughan.com/2012/01/jaxb-and-inhertiance-using-xmladapter.html –

+0

我確實以不同的方式在這裏提出問題http ://stackoverflow.com/questions/35012155/xmljavatypeadapter-not-calling-typeadapter然後回答它,即使它不是最優雅的解決方案。我不知道,我必須從更高的層次做到這一點...我會清理它刪除了這個問題(因爲它是在其他地方回答)後 – Xetius

回答

1

您嘗試執行的操作本質上不受JAXB支持。 XML Schema 1.1引入了一種類型替代的概念,您可以使用該替代類型來使用該元素上的屬性值來確定元素的類型(使用XPath表達式),但JAXB 2.x(基於XML架構1.0)。

您可以使用xsi:type執行與JAXB類似的操作,但您需要在將文檔傳遞給JAXB Unmarshaller之前,在磁盤上更改文檔或進行變換(例如使用XSLT)以包含xsi:type屬性。 xsi:type的值將是您使用註釋分配的類型名稱。請參閱@XmlType註釋以瞭解如何計算類的類型名稱。

+0

謝謝。我以爲我可以用TypeAdapter做些事情,但我無法讓它工作。顯然這就是爲什麼。 – Xetius