Java物件和XML轉換
阿新 • • 發佈:2018-12-03
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轉換成物件。