jaxb解析xml關於處理list的註解

在JAXB中(用於JAVA對象和xml之間的轉換),經常出現各類的 @XmlElement這樣的標記, 

下面就來以一個例子小結下,加深學習: 

import java.util.*;  
import javax.xml.bind.annotation.*;  
   
@XmlRootElement  
@XmlAccessorType(XmlAccessType.FIELD)  
public class Customer {  
   
    private List<String> emailAddresses;  
       
    public Customer() {  
        emailAddresses = new ArrayList<String>();  
    }  
   
    public List<String> getEmailAddresses() {  
        return emailAddresses;  
    }  
   
    public void setEmailAddresses(List<String> emailAddresses) {  
        this.emailAddresses = emailAddresses;  
    }  
   
}  

這個是一個典型的POJO了,其中引用了對象emailAddress,是一個List,那麼下面演示各類用法: 
  先看默認的調用代碼如下: 

import javax.xml.bind.JAXBContext;  
import javax.xml.bind.Marshaller;  
   
public class Demo {  
   
    public static void main(String[] args) throws Exception {  
        JAXBContext jc = JAXBContext.newInstance(Customer.class);  
   
        Customer customer = new Customer();  
        customer.getEmailAddresses().add("[email protected]");  
        customer.getEmailAddresses().add("[email protected]");  
   
        Marshaller marshaller = jc.createMarshaller();  
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
        marshaller.marshal(customer, System.out);  
    }  
}  

默認的把這個對象輸出爲一般的XML: 
<customer> 
    <emailAddresses>[email protected]</emailAddresses> 
    <emailAddresses>[email protected]</emailAddresses> 
</customer> 

下面逐一看每個註解的用法 
1) @XmlElement 
   
@XmlElement(name="email-address") 
    private List<String> emailAddresses; 
加上這個註解的話,則按自定義的xml標籤名去輸出某個屬性,如下: 
<customer> 
    <email-address>[email protected]</email-address> 
    <email-address>[email protected]</email-address> 
</customer> 

2) @XmlElementWrapper 
  這個註解等於在最外面再包一層了, 
@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Customer { 

    @XmlElementWrapper(name="email-addresses") 
    @XmlElement(name="email-address") 
    private List<String> emailAddresses; 


  輸出: 
<customer> 
    <email-addresses> 
        <email-address>[email protected]</email-address> 
        <email-address>[email protected]</email-address> 
    </email-addresses> 
</customer> 


3) @XmlList 
  這個等於是在同一行中,把list中的輸出,以空格形式分隔開來, 

@XmlRootElement  
@XmlAccessorType(XmlAccessType.FIELD)  
public class Customer {  
   
    @XmlList  
    private List<String> emailAddresses;  
   
}  

輸出: 
  <customer> 
    <emailAddresses>[email protected] [email protected]</emailAddresses> 
</customer> 

4) 
@XmlList和 @XmlAttribute混合使用 
      @XmlList 
    @XmlAttribute 
    private List<String> emailAddresses; 

輸出: 
   <customer 
    emailAddresses="[email protected] [email protected]"/> 

看到沒?就是同一行中逗號輸出,並作爲customer的一個屬性 


5) 
  @XmlList 和 @XmlValue混用 
    
    @XmlList 
    @XmlValue 
    private List<String> emailAddresses; 
  

就是把emailAddress的list的值,作爲<customer>的value  輸出,結果如下: 
<customer>[email protected] [email protected]</customer> 


本文來至:http://jackyrong.iteye.com/blog/1890669


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章