使用JAXB从一个对象模型中产生XML文档
【IT168技术文档】
XML文档是由一系列的元素(<element>value</element>)和属性(<element attribute="value"/>)组成。JAXB使用两种注释来区分他们:@XmlAttribute 和 @XmlElement,每个注释有一系列的参数可以对属性进行重命名,可以为空值,给定的一个默认值等。下列代码使用两种注释来将id转换为XMl的属性(而不是元素)并且重命名了发货地址元素(将address改为deliveryAddress):
这段代码使用了@XmlElementWrapper注释,它产生包装元素在发货地址的外围。再看Listing 2,有个<deliveryAddresses>元素,通过上面的代码,就可以在<address>元素前加了<delivery>元素。@XmlTransient
public abstract class Customer ...{
![]()
@XmlAttribute
protected Long id;
protected String telephone;
protected String email;
protected Address homeAddress;
@XmlElementWrapper(name = "delivery")
@XmlElement(name = "address")
protected List<Address> deliveryAddresses = new ArrayList<Address>();
// Constructors, getters, setters
}
继续讨论地址,如果想要放弃标识符和tags,可以使用@XmlTransient注释。为了重命名一个元素,使用@XmlElement注释的name属性。下列代码就对属性zipcode重命名为<zip>元素:
上面的@XmlType注释可以将一个类或者枚举映射为一个XML schema类型。可以使用它来指定一个命名空间或者使用propOrder属性来定制属性,按照这个定制可以列出属性的名字和产生XML文档。@XmlType(propOrder = ...{"street", "zipcode", "city", "country"})
@XmlAccessorType(XmlAccessType.FIELD)
public class Address ...{
![]()
@XmlTransient
private Long id;
private String street;
private String city;
@XmlElement(name = "zip")
private String zipcode;
private String country;
@XmlTransient
private List<Tag> tags = new ArrayList<Tag>();
// Constructors, getters, setters
}
Table 1显示了XML文档的三个不同的摘录:
|
Default XML Representation
|
Annotated Customer Class
|
Annotated Address Class
|
|
<customer>
|
<individual id="1">
|
<individual id="1">
|
