技术开发 频道

使用JAXB从一个对象模型中产生XML文档


IT168技术文档
      XML文档是由一系列的元素(<element>value</element>)和属性(<element attribute="value"/>)组成。JAXB使用两种注释来区分他们:@XmlAttribute 和 @XmlElement,每个注释有一系列的参数可以对属性进行重命名,可以为空值,给定的一个默认值等。下列代码使用两种注释来将id转换为XMl的属性(而不是元素)并且重命名了发货地址元素(将address改为deliveryAddress):
@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 }
    这段代码使用了@XmlElementWrapper注释,它产生包装元素在发货地址的外围。再看Listing 2,有个<deliveryAddresses>元素,通过上面的代码,就可以在<address>元素前加了<delivery>元素。 

    继续讨论地址,如果想要放弃标识符和tags,可以使用@XmlTransient注释。为了重命名一个元素,使用@XmlElement注释的name属性。下列代码就对属性zipcode重命名为<zip>元素:
@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 }
    上面的@XmlType注释可以将一个类或者枚举映射为一个XML schema类型。可以使用它来指定一个命名空间或者使用propOrder属性来定制属性,按照这个定制可以列出属性的名字和产生XML文档。 

    Table 1显示了XML文档的三个不同的摘录:

Default XML Representation

 

 

 

 

Annotated Customer Class

 

 

 

 

Annotated Address Class

 

 

 

 

<customer>
  <deliveryAddresses>
    <city>London</city>
    <country>UK</country>
    <id>3</id>
    <street>Findsbury</street>
    <tags>
      <name>working hours</name>
    </tags>
    <tags>
      <name>mind the dog</name>
    </tags>
    <zipcode>CE451</zipcode>
  </deliveryAddresses>
  <deliveryAddresses>
    <city>Brighton</city>
    <country>UK</country>
    <id>4</id>
    <street>Camden</street>
    <tags>
      <name>working hours</name>
    </tags>
    <tags>
      <name>week-ends</name>
    </tags>
    <zipcode>NW487</zipcode>
  </deliveryAddresses>
  (...)
</customer>

 

 

 

 

<individual id="1">
  <delivery>
    <address>
      <city>London</city>
      <country>UK</country>
      <id>3</id>
      <street>Findsbury</street>
      <tags>
        <name>working hours</name>
      </tags>
      <tags>
        <name>mind the dog</name>
      </tags>
      <zipcode>CE451</zipcode>
    </address>
    <address>
      <city>Brighton</city>
      <country>UK</country>
      <id>4</id>
      <street>Camden</street>
      <tags>
        <name>working hours</name>
      </tags>
      <tags>
        <name>week-ends</name>
      </tags>
      <zipcode>NW487</zipcode>
    </address>
  </delivery>
  (...)
</individual>

 

 

 

 

<individual id="1">
  <delivery>
   <address>
     <street>Findsbury</street>
     <zip>CE451</zip>
     <city>London</city>
     <country>UK</country>
   </address>
   <address>
     <street>Camden</street>
     <zip>NW487</zip>
     <city>Brighton</city>
     <country>UK</country>
   </address>
  </delivery>
  (...)
</individual>

 

 

 

 



0
相关文章