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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值