1. 程式人生 > >Xml和Bean互轉 jaxb

Xml和Bean互轉 jaxb

JAXB:Java Architecture for XML Binding
是一個業界的標準,是一項可以根據XML Schema產生java類的技術.該過程中jaxb也提供了講xml例項文件反向生成java物件方法,並能講java物件書的內容重新寫到xml例項文件中. 從另一方面來講,jaxb提供了快速而簡單的方法將xml模式繫結到java表示,使得java開發者在java應用程式中能方便的結合xml資料和處理函式

@XmlRootElement
public class Student {

	private Integer id;
	private String name;

	public Student() {
		super();
	}

	public Student(Integer id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public Integer getId() {
		return id;
	}
	@XmlElement
	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}
	@XmlElement
	public void setName(String name) {
		this.name = name;
	}

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

}

jdk1.7之前bean和xml轉換的方式(解組和編組),手動得到各種物件,設定各種引數

public class JAXBTest {
	public static void main(String[] args) {
		generateXml();
		generateBean();

	}

	// bean轉為xml;編組方法
	public static void generateXml() {
		Student stu = new Student(10, "小明");
		File f = new File("D:/cheng/zz.xml");
		JAXBContext jc;
		try {
			// 根據Student生成上下文物件
			jc = JAXBContext.newInstance(stu.getClass());
			// 從上下文中獲取Marshller物件;作用講bean編組(轉換)xml
			Marshaller ma = jc.createMarshaller();
			// 生成xml做的一些配置
			// 格式輸出,按照標籤自動換行,否則一行輸出
			ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			// 設定編碼,預設為utf-8
			ma.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
			// 是否省略頭資訊,預設是不省略(預設false)
			ma.setProperty(Marshaller.JAXB_FRAGMENT, false);
			// 轉換,講p轉換為檔案file
			ma.marshal(stu, f);
			System.out.println(f);
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}

	// xml轉了bean;解組方法
	public static void generateBean() {
		File f = new File("D:/cheng/zz.xml");
		JAXBContext jc;
		try {
			jc = JAXBContext.newInstance(Student.class);// 根據要生成的java類,得到上下文
			Unmarshaller uma = jc.createUnmarshaller();// 根據上下文得到操作物件
			Student stu = (Student) uma.unmarshal(f);//解組; 將xml檔案轉為java物件
			System.out.println(stu);
		} catch (JAXBException e) {
			e.printStackTrace();
		} 
	}
}

jdk1.7開始,對解組和編組進行更簡單的封裝;直接通過JAXB靜態呼叫相應的根據方法就行了;如果實際專案中要進行個性化設定,才需要自己建立JAXBContext例項

//jdk1.7開始,編組方法;bean轉為xml
	public static void generateXml1() {
		Student stu = new Student(20, "小剛");
		File f=new File("D:/cheng/zz.xml");
		JAXB.marshal(stu, f);
		System.out.println(f.toString());
	}

	//jdk1.7開始,解組組方法;xml轉為bean
	public static void generateBean1() {
		File f=new File("D:/cheng/zz.xml");
		Student stu=JAXB.unmarshal(f, Student.class);
		System.out.println(stu);
	}