有時候,咱們須要把Java對象轉換成XML文件。這時能夠用JAXB來實現。(JDK1.6及之後的版本無需導入依賴包,由於已經包含在JDK裏了)html
假如某個公司有許多部門,每一個部門有許多職員,咱們能夠這樣來設計簡單的bean對象。java
- @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字符串。post
- 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;
- }
- }
控制檯打印信息:this
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <department name="娛樂圈">
- <staff smoker="true">
- <age>40</age>
- <name>周星馳</name>
- </staff>
- <staff smoker="true">
- <age>40</age>
- <name>周星馳</name>
- </staff>
- <staff smoker="true">
- <age>40</age>
- <name>周星馳</name>
- </staff>
- </department>
注意到,咱們能夠用Marshaller.marshal方法將對象轉換成xml文件,也能夠用UnMarshaller.unmarshal將xml轉換成對象。編碼