1. 程式人生 > >Java物件和XML轉換

Java物件和XML轉換

Java物件和XML轉換

有時候,我們需要把Java物件轉換成XML檔案。這時可以用JAXB來實現。(JDK1.6及以後的版本無需匯入依賴包,因為已經包含在JDK裡了)

假如某個公司有許多部門,每個部門有許多職員,我們可以這樣來設計簡單的bean物件。

@XmlRootElement(name="department")  
public class Department {  

private String name;    //部門名稱  
private List<Staff> staffs;           // 其實staff是單復同型,這裡是加's'是為了區別staff  
  
public String getName() {  
    return name;  
}  
@XmlAttribute  
public void setName(String name) {  
    this.name = name;  
}  
public List<Staff> getStaffs() {  
    return staffs;  
}  
@XmlElement(name="staff")  
public void setStaffs(List<Staff> staffs) {  
    this.staffs = staffs;  
}  
}  



@XmlRootElement(name="staff")  
public class Staff {  

private String name;    // 職員名稱  
private int age;        // 職員年齡  
private boolean smoker; // 是否為菸民  
  
public String getName() {  
    return name;  
}  
@XmlElement  
public void setName(String name) {  
    this.name = name;  
}  
public int getAge() {  
    return age;  
}  
@XmlElement  
public void setAge(int age) {  
    this.age = age;  
}  
public boolean isSmoker() {  
    return smoker;  
}  
@XmlAttribute  
public void setSmoker(boolean smoker) {  
    this.smoker = smoker;  
}  
}  

下面將生成一個簡單的物件,並轉換成XML字串。

public class Main {  

public static void main(String[] args) throws Exception {  
      
    JAXBContext context = JAXBContext.newInstance(Department.class,Staff.class);    // 獲取上下文物件  
    Marshaller marshaller = context.createMarshaller(); // 根據上下文獲取marshaller物件  
      
    marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");  // 設定編碼字符集  
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML輸出,有分行和縮排  
      
    marshaller.marshal(getSimpleDepartment(),System.out);   // 列印到控制檯  
      
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    marshaller.marshal(getSimpleDepartment(), baos);  
    String xmlObj = new String(baos.toByteArray());         // 生成XML字串  
    System.out.println(xmlObj);  
}  
  
/** 
 * 生成一個簡單的Department物件 
 * @return 
 */  
private static Department getSimpleDepartment() {  
    List<Staff> staffs = new ArrayList<Staff>();  
      
    Staff stf = new Staff();  
    stf.setName("周杰倫");  
    stf.setAge(30);  
    stf.setSmoker(false);  
    staffs.add(stf);  
    stf.setName("周筆暢");  
    stf.setAge(28);  
    stf.setSmoker(false);  
    staffs.add(stf);  
    stf.setName("周星馳");  
    stf.setAge(40);  
    stf.setSmoker(true);  
    staffs.add(stf);  
      
    Department dept = new Department();  
    dept.setName("娛樂圈");  
    dept.setStaffs(staffs);  
      
    return dept;  
}  
}  

控制檯列印資訊:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 40 周星馳 40 周星馳 40 周星馳

注意到,我們可以用Marshaller.marshal方法將物件轉換成xml檔案,也可以用UnMarshaller.unmarshal將xml轉換成物件。