将具有相同元素和属性名称的XML映射到Java对象

时间:2012-06-01 10:51:11

标签: java xml parsing jaxb mapping

我已经搜索过这个特殊问题,我找到的最接近的线程是这个:Java/JAXB: Unmarshall XML elements with same name but different attribute values to different class members但它仍然不是我需要的,所以我希望有人可以帮助我。

我正在Zimbra Collaboration Suite 7服务器上执行SOAP请求以获取联系人。答案是这样的:

<cn fileAsStr="Arthur, Spooner" f="" id="280" rev="1973" d="1338524233000" t="" md="1338524233" ms="1973" l="7"><meta/><a n="homePostalCode">93849</a><a n="lastName">Spooner</a><a n="birthday">1980-05-24</a><a n="homeStreet">Berkleystreet 99</a><a n="firstName">Arthur</a></cn>

我想将它映射到Java对象,如下所示:

public class Contact {
Integer id;
Integer rev;
String namePrefix;
String firstName;
String middleName;
String lastName;
String jobTitle;
ArrayList<Adress> adresses;
Date birthday;
String department;
Integer mobilePhone;
String email;
String company;
String notes;
    ...

我通常使用JAXB来做这件事,但由于所有元素都被称为a和所有属性n,我不知道如何映射它。我真的很感激代码片段或任何形式的帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试这样做:

@XmlAccessorType(XmlAccessType.FIELD)
public class ContactAttribute {

    @XmlAttribute(name="n")
    private String attribute;

    @XmlValue
    private String value;

}

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

    @XmlAttribute
    Integer id;

    @XmlAttribute
    Integer rev;

    //...

    @XmlElements(@XmlElement(name = "a"))
    List<ContactAttribute> attributes;
    //...

}

答案 1 :(得分:-1)

使用Castor Mapping 它将帮助您对Marshall和Unmarshall数据进行处理。