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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值