如何编写POJO来编组两个对象列表?

时间:2018-10-25 08:54:49

标签: java jaxb

<MyRoot>
    <Person>
        <Name>Joe</Name>
        <Age>20</Age>
    </Person>   
    <Address>
        <HouseName>Joe</HouseName>
        <Place>Delhi</Place>
    </Address>
    <Person>
        <Name>James</Name>
        <Age>21</Age>
    </Person>   
    <Address>
        <HouseName>Joe</HouseName>
        <Place>Mumbai</Place>
    </Address>
</MyRoot>

从xml上方,您可以看到person和address标签没有包装在包装标签中。我想使用相同格式的JAXB生成xml。没有包装标签,我不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

您是否正在寻找创建包含“人员”列表和地址列表的java对象?

public class MyRootObject {
   private List<Person> persons;
   private List<Address> addresses;
}

如果以上是您打算做的事情,请注意XML对象将更改.​​..

答案 1 :(得分:0)

如果您真的想保留<Person> <Address> <Person> <Address>之类的混合序列(正如您对@Vankuisher的回答所说的那样), 那么您需要将PersonAddress放在两个不同的List中, 但在相同 List中。

为此,PersonAddress必须是公共超类的子类 (例如class Person extends Itemclass Address extends Item)。 然后,您使用@XmlElements批注定义之间的映射 XML元素名称和Java类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "MyRoot")
public class MyRoot {

    @XmlElements({
        @XmlElement(name = "Address", type = Address.class),
        @XmlElement(name = "Person", type = Person.class)
    })
    private List<Item> items;

    // public getters and setters (omitted here for brevity)
}

封送此类MyRoot对象时,您将获得XML输出 并具有与List<Item>中相同的项目顺序。