• Java对象和XML转换


    Java对象和XML转换

     

    有时候,我们需要把Java对象转换成XML文件。这时可以用JAXB来实现。(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了)

    假如某个公司有许多部门,每个部门有许多职员,我们可以这样来设计简单的bean对象。

    [java] view plain copy
     
    1. @XmlRootElement(name="department")  
    2. public class Department {  
    3.   
    4.     private String name;    //部门名称  
    5.     private List<Staff> staffs;           // 其实staff是单复同型,这里是加's'是为了区别staff  
    6.       
    7.     public String getName() {  
    8.         return name;  
    9.     }  
    10.     @XmlAttribute  
    11.     public void setName(String name) {  
    12.         this.name = name;  
    13.     }  
    14.     public List<Staff> getStaffs() {  
    15.         return staffs;  
    16.     }  
    17.     @XmlElement(name="staff")  
    18.     public void setStaffs(List<Staff> staffs) {  
    19.         this.staffs = staffs;  
    20.     }  
    21. }  
    [java] view plain copy
     
    1. @XmlRootElement(name="staff")  
    2. public class Staff {  
    3.   
    4.     private String name;    // 职员名称  
    5.     private int age;        // 职员年龄  
    6.     private boolean smoker; // 是否为烟民  
    7.       
    8.     public String getName() {  
    9.         return name;  
    10.     }  
    11.     @XmlElement  
    12.     public void setName(String name) {  
    13.         this.name = name;  
    14.     }  
    15.     public int getAge() {  
    16.         return age;  
    17.     }  
    18.     @XmlElement  
    19.     public void setAge(int age) {  
    20.         this.age = age;  
    21.     }  
    22.     public boolean isSmoker() {  
    23.         return smoker;  
    24.     }  
    25.     @XmlAttribute  
    26.     public void setSmoker(boolean smoker) {  
    27.         this.smoker = smoker;  
    28.     }  
    29. }  


    下面将生成一个简单的对象,并转换成XML字符串。

    [java] view plain copy
     
    1. public class Main {  
    2.   
    3.     public static void main(String[] args) throws Exception {  
    4.           
    5.         JAXBContext context = JAXBContext.newInstance(Department.class,Staff.class);    // 获取上下文对象  
    6.         Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象  
    7.           
    8.         marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");  // 设置编码字符集  
    9.         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进  
    10.           
    11.         marshaller.marshal(getSimpleDepartment(),System.out);   // 打印到控制台  
    12.           
    13.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    14.         marshaller.marshal(getSimpleDepartment(), baos);  
    15.         String xmlObj = new String(baos.toByteArray());         // 生成XML字符串  
    16.         System.out.println(xmlObj);  
    17.     }  
    18.       
    19.     /** 
    20.      * 生成一个简单的Department对象 
    21.      * @return 
    22.      */  
    23.     private static Department getSimpleDepartment() {  
    24.         List<Staff> staffs = new ArrayList<Staff>();  
    25.           
    26.         Staff stf = new Staff();  
    27.         stf.setName("周杰伦");  
    28.         stf.setAge(30);  
    29.         stf.setSmoker(false);  
    30.         staffs.add(stf);  
    31.         stf.setName("周笔畅");  
    32.         stf.setAge(28);  
    33.         stf.setSmoker(false);  
    34.         staffs.add(stf);  
    35.         stf.setName("周星驰");  
    36.         stf.setAge(40);  
    37.         stf.setSmoker(true);  
    38.         staffs.add(stf);  
    39.           
    40.         Department dept = new Department();  
    41.         dept.setName("娱乐圈");  
    42.         dept.setStaffs(staffs);  
    43.           
    44.         return dept;  
    45.     }  
    46. }  


    控制台打印信息:

    [plain] view plain copy
     
    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  
    2. <department name="娱乐圈">  
    3.     <staff smoker="true">  
    4.         <age>40</age>  
    5.         <name>周星驰</name>  
    6.     </staff>  
    7.     <staff smoker="true">  
    8.         <age>40</age>  
    9.         <name>周星驰</name>  
    10.     </staff>  
    11.     <staff smoker="true">  
    12.         <age>40</age>  
    13.         <name>周星驰</name>  
    14.     </staff>  
    15. </department>  


    注意到,我们可以用Marshaller.marshal方法将对象转换成xml文件,也可以用UnMarshaller.unmarshal将xml转换成对象。

  • 相关阅读:
    Java Object-Oriented:day11 【 Inner Classes 】
    Java Object-Oriented:day11 【 final 】
    Java Object-Oriented:day10 【 Inheritance】
    Java Object-Oriented:day10 【 Interfaces】
    深入剖析Kubernetes学习笔记:StatefulSet-MySQL集群(20)
    Java Object-Oriented:day09 【 Inheritance、Abstract Classes】
    Java Object-Oriented:day09 【 Inheritance、super、this】
    kubernetes云平台管理实战:常用命令大全(十二)
    Java API:day08 【static、Arrays、Math】
    Java API:day08 【String】
  • 原文地址:https://www.cnblogs.com/qi-dian-ao/p/8470764.html
Copyright © 2020-2023  润新知