Jaxb xml映射为列表元素

时间:2016-03-26 20:01:39

标签: java xml jaxb

我在为以下XML创建Java类时遇到了麻烦:

<Users>
    <User id="1">
        <Name>Test</Name>
    </User>
    <User id="2">
        <Name>Test2</Name>
    </User>
</Users>

我正在使用Jaxb(javax.xml)和 Users 类,其中包含用户对象的地图(Map表示String是用户ID)。在此示例中,用户包含ID和名称,其中Id是用户元素的属性,Id是用户中的元素。

我查看了some examples,但所有示例和指南都侧重于围绕用户的根元素(见下文)。

<Database>    
    <Users>
        <User id="1">
            <Name>Test</Name>
        </User>
        <User id="2">
            <Name>Test2</Name>
        </User>
    </Users>
</Database>

是否可以删除根元素数据库,只有用户,其中包含许多用户元素?

1 个答案:

答案 0 :(得分:0)

适配器将在具有List的用户(JAXB可以处理的用户)和带有Map的UsersMap之间进行转换,但是必须为某个字段进行操作 - 因此围绕用户的附加级别。

您可以(稍加努力)在您的班级中保存地图和列表,让JAXB在列表中工作。在编组之前和解组之后,需要调用转换方法,但应用程序可以使用地图。

@XmlRootElement(name="Users")
@XmlAccessorType(XmlAccessType.FieLD)
public class Users {
    @XmlElement( name = "user", required = true )
    private List<User> user = ...
    public List<User> getUser(){...}
    @XmlTransient
    private Map<Integer,User> id2user = ...
    public void putUser( User user ){ ... }
    public User getUser( Integer is ){ ... }

    public void map2list(){...}
    public void list2map(){...}
}