簡體   English   中英

JAXB:使用同一元素的多個名稱解組xml

[英]JAXB: unmarshalling xml with multiple names for the same element

我認為這對於真正理解JAXB綁定文件的人來說很容易......

基本問題

如何配置JAXB以將多個元素解組到同一個類中?

注意:我想避免為我的項目添加另一個依賴項(如MOXy)。 理想情況下,這可以通過注釋或自定義綁定文件來完成。

背景

我有一個XML文檔,其中包含相同元素的許多變體 - 每個變體具有完全相同的屬性。 使用下面的示例,我關心的只是“員工”,但XML指定“董事,經理和員工”。 出於我們的目的,這些都是同一父類的子類,我們只需要使用父類型(Employee),並且我們的對象模型沒有或不需要子類的實例。

我希望JAXB將任何director, manager, or staff元素的實例綁定到Employee對象中。

輸入:

<organization>
    <director>
        <fname>Dan</fname>
        <lname>Schman</lname>
    </director>    
    <manager>
        <fname>Joe</fname>
        <lname>Schmo</lname>
    </manager>    
    <staff>
        <fname>Ron</fname>
        <lname>Schwan</lname>
    </staff>    
    <staff>
        <fname>Jim</fname>
        <lname>Schwim</lname>
    </staff>    
    <staff>
        <fname>Jon</fname>
        <lname>Schwon</lname>
    </staff>    
</organization>

輸出:

在解組此示例之后,我最終得到一個具有一個屬性的Organization對象: List<Employees> employees ,其中每個雇員只有firstName和lastName。

(注意:每個員工都是Employee NOT Director/Manager/Staff 。在解組時子類信息會丟失。我們也不關心編組 - 我們只需要從XML創建對象)

這可以在沒有MOXy這樣的擴展的情況下完成嗎? 自定義bindings.xjb文件可以保存一天嗎?

這對應於選擇結構。 您可以為此用例使用@XmlElements批注:

@XmlElements({
    @XmlElement(name="director", type=Employee.class),
    @XmlElement(name="manager", type=Employee.class)
})
List<Employee> getEmployees() {
    return employees;
}

如果您從XML模式開始,以下內容將有所幫助:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM