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转换成对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值