JAXB-java对象和xml相互转换

1、概念是什么:(Java Architecture for XML Binding) 是一个业界的标准,即是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。有多种实现。

 

2、JAXB中有什么:包含“xjc”工具和一个“schemagen”工具。 

“xjc”工具可以用来将XML模式或其他类型模式文件(Java 1.6试验性地支持RELAX NG,DTD以及WSDL)转换为Java类。Java类使用javax.xml.bind.annotation包下的Java 标注,例如@XmlRootElement和@XmlElement。XML列表序列表示为java.util.List类型的属性, 通过JAXBContext可以创建Marshallers(将Java对象转换成XML)和Unmarshallers(将XML解析为Java对象)。

另外的“schemagen”工具,能够执行“xjc”的反向操作,通过一组标注的Java类创建一个XML模式。


第一步:创建要转化的java对象,该对象需要使用相关注解注释各字段(标注在get方法上)。

package test.my;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * @Version 1.0
 * @Author .com
 * @Created Sep 15, 2015 10:35:59 AM
 * @Description
 *              <p>
 *              创建要转化的java对象,该对象需要使用相关注解注释各字段(标注在get方法上)
 * @Modification
 *               <p>
 *               Date Author Version Description
 *               <p>
 *               Sep 15, 2015 .com 1.0 create file
 */
@XmlRootElement
public class Customer {

	private String name;

	private int age;

	private int id;

	@XmlElement
	public String getName() {
		return name;
	}

	public void setName(final String name) {
		this.name = name;
	}

	@XmlElement
	public int getAge() {
		return age;
	}

	public void setAge(final int age) {
		this.age = age;
	}

	@XmlAttribute
	public int getId() {
		return id;
	}

	public void setId(final int id) {
		this.id = id;
	}

	@Override
	public String toString() {
		return "Customer [id=" + id + ",name=" + name + ",age=" + age + "]";
	}

}


编组(java对象转xml),提供多种编组目的地,以下只介绍两种,一种编组到文件,一种编组到控制台。

package test.my;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

//Marshaller  对象生成到xml中
public class Object2XmlDemo {

	public static void main(final String[] args) {

		final Customer customer = new Customer();
		customer.setId(001);
		customer.setName("LiLei");
		customer.setAge(29);

		try {
			final File file = new File("D:\\fileTest.xml");
			final JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
			final Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
			// output pretty printed
			jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			jaxbMarshaller.marshal(customer, file);
			jaxbMarshaller.marshal(customer, System.out);
		} catch (final JAXBException e) {
			e.printStackTrace();
		}
	}
}

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="1">
    <age>29</age>
    <name>LiLei</name>
</customer>


解组(xml转java对象),直接从文件解组xml成java对象。

package test.my;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

//Unmarshaller  解组(xml转java对象),直接从文件解组xml成java对象。
public class Xml2ObjectDemo {

	public static void main(final String[] args) {
		try {
			final File file = new File("D:\\fileTest.xml");
			final JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
			final Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
			final Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
			System.out.println(customer);
		} catch (final JAXBException e) {
			e.printStackTrace();
		}
	}
}

生成对象  Customer [id=1,name=LiLei,age=29]



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值