亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

JAXB 實現java對象與xml之間互相轉換

2019-11-06 06:13:41
字體:
來源:轉載
供稿:網友

JAXB 實現java對象與xml之間互相轉換

一、簡介

      JAXB(Java Architecture for XML Binding) 是一個業界的標準,是一項可以根據XML Schema產生Java類的技術。該過程中,JAXB也提供了將XML實例文檔反向生成Java對象樹的方法,并能將Java對象樹的內容重新寫到 XML實例文檔。

      Jaxb 2.0是JDK 1.6的組成部分。我們不需要下載第三方jar包 即可做到輕松轉換。Jaxb2使用了JDK的新特性,如:Annotation、GenericType等,需要在即將轉換的JavaBean中添加annotation注解。

 

二、重要概念

JAXBContext類,是應用的入口,用于管理XML/Java綁定信息。Marshaller接口,將Java對象序列化為XML數據。Unmarshaller接口,將XML數據反序列化為Java對象。

首先熟悉一下JAXB實現對象與xml互轉時常用的一些注解使用:

1.@XmlRootElement,用于類級別的注解,對應xml的跟元素。通過name屬性定義這個根節點的名稱。

2.@XmlaccessorType,定義映射這個類中的何種類型都需要映射到xml。(如果不存在@XmlAccessorType,默認使用XmlAccessType.PUBLIC_MEMBER注解)

  參數:XmlAccessType.FIELD: java對象中的所有成員變量。

  XmlAccessType.PROPERTY:java對象中所有通過getter/setter方式訪問的成員變量。

  XmlAccessType.PUBLIC_MEMBER:java對象中所有的public訪問權限的成員變量和通過getter/setter方式訪問的成員變量。

  XmlAccessType.NONE: java對象的所有屬性都不映射為xml的元素。

3.@XmlAttribute,用于把java對象的屬性映射為xml的屬性,并可通過name屬性為生成的xml屬性指定別名。

4.@XmlElement,指定一個字段或get/set方法映射到xml的節點。通過name屬性定義這個根節點的名稱。

5.@XmlElementWrapper,為數組或集合定義一個父節點。通過name屬性定義這個父節點的名稱。

 

下面來看一個例子:

先定義一個學生類,Student如下:

package xmldemo;import java.util.List;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlElementWrapper;/** * @author aionbo * @type_name Student * @description TODO * @date 2017年3月7日 上午11:36:25 */public class Student {	String name; // 姓名	String sex; // 性別	int number; // 學號	String className; // 班級	List<String> hobby; // 愛好	public Student() {	}	public Student(String name, String sex, int number, String className,			List<String> hobby) {		this.name = name;		this.sex = sex;		this.number = number;		this.className = className;		this.hobby = hobby;	}	@XmlAttribute(name = "name")	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	@XmlAttribute(name = "sex")	public String getSex() {		return sex;	}	public void setSex(String sex) {		this.sex = sex;	}	@XmlAttribute(name = "number")	public int getNumber() {		return number;	}	public void setNumber(int number) {		this.number = number;	}	@XmlElement(name = "className")	public String getClassName() {		return className;	}	public void setClassName(String className) {		this.className = className;	}	@XmlElementWrapper(name = "hobbys")	@XmlElement(name = "hobby")	public List<String> getHobby() {		return hobby;	}	public void setHobby(List<String> hobby) {		this.hobby = hobby;	}}

切記,如果java對象屬性同時添加了get和set方法,注解不能定義在屬性的定義上,只需在get或者set方法上定義一個即可,否則jaxb會報錯??!如下:

Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions  Class has two properties of the same name "name"

 

然后再定義學生集合類,StudentList如下:

package xmldemo;import java.util.List;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;/** * @author aionbo * @type_name StudentList * @description TODO * @date 2017年3月7日 上午11:40:18 */@XmlRootElement(name = "list")public class StudentList {	List<Student> students; // 所有學生信息的集合	@XmlElement(name = "student")	public List<Student> getStudents() {		return students;	}	public void setStudents(List<Student> students) {		this.students = students;	}} 

最后寫xml和java對象互轉的類(通過Marshaller類實現將對象轉換為xml,同時也可利用Unmarshaller類進行xml轉換為類):

1.java對象轉換為xml:

package xmldemo;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.StringWriter;import java.util.ArrayList;import java.util.List;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;/** * @author aionbo * @type_name BeanToXML * @description TODO * @date 2017年3月7日  上午11:43:36 */public class BeanToXML {	       /**	      * java對象轉換為xml文件	      * @param xmlPath  xml文件路徑	      * @param load    java對象.Class	      * @return    xml文件的String	      * @throws JAXBException    	      */	     public static String beanToXml(Object obj,Class<?> load) throws JAXBException{	         JAXBContext context = JAXBContext.newInstance(load);	         Marshaller marshaller = context.createMarshaller();	         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);	         marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");	         StringWriter writer = new StringWriter();	         marshaller.marshal(obj,writer);	         return writer.toString();	     }	     public static void main(String[] args) throws JAXBException, IOException {	             List<String> hobby = new ArrayList<>();	             hobby.add("籃球");	             hobby.add("音樂");	             hobby.add("乒乓球");	             	             List<Student> studentList = new ArrayList<>();	             	             Student st = new Student("張三","男",10001,"尖子班",hobby);	             studentList.add(st);	             Student st1 = new Student("李四","男",10002,"普通班",hobby);	             studentList.add(st1);	             Student st2 = new Student("莉莉","女",10003,"普通班",hobby);	             studentList.add(st2);	             	             StudentList students = new StudentList();	             students.setStudents(studentList);	             //轉換	             String str =  BeanToXML.beanToXml(students, StudentList.class);	             	             //寫入到xml文件中	             File file=new File("C://Users//Administrator//Desktop//test.xml");	             if(!file.exists()){	 				file.createNewFile();	 			}	             BufferedWriter bfw = new BufferedWriter(new FileWriter(file));	             bfw.write(str);	             bfw.close();	     }}

測試生成的xml文件如下圖:

2.xml轉換為java對象:

package xmldemo;import java.io.File;import java.io.IOException;import java.util.List;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;/** * @author aionbo * @type_name XMLToBean * @description TODO * @date 2017年3月7日  上午11:54:07 */public class XMLToBean {		/**	     * xml文件配置轉換為對象	     * @param xmlPath  xml文件路徑	     * @param load    java對象.Class	     * @return    java對象	     * @throws JAXBException    	     * @throws IOException	     */	    public static Object xmlToBean(String xmlPath,Class<?> load) throws JAXBException, IOException{	        JAXBContext context = JAXBContext.newInstance(load);  	        Unmarshaller unmarshaller = context.createUnmarshaller();	        File file=new File(xmlPath);            if(!file.exists()){				file.createNewFile();			}	        Object object = unmarshaller.unmarshal(file);	        return object;	    }	    	    public static void main(String[] args) throws IOException, JAXBException {	        String xmlPath = "C://Users//Administrator//Desktop//test.xml";	        Object object = XMLToBean.xmlToBean(xmlPath,StudentList.class);	        StudentList students = (StudentList)object;	        List<Student> studentList = students.getStudents();	        	        for(int i=0;i<studentList.size();i++){	            System.out.println(studentList.get(i).name);	            System.out.println(studentList.get(i).sex);	            System.out.println(studentList.get(i).number);	            System.out.println(studentList.get(i).className);	            for(String str :studentList.get(i).hobby){	                System.out.print(str+" ");	            }	            System.out.println();	            System.out.println("-------------");	        }	    }}

測試打印的結果如下:

張三男10001尖子班籃球 音樂 乒乓球 -------------李四男10002普通班籃球 音樂 乒乓球 -------------莉莉女10003普通班籃球 音樂 乒乓球 -------------

有不明白的可以聯系我,互相交流!jaxb雖然挺實用,但是在xml轉java對象時xml文件不能配置錯了,必須嚴格按照自己定義的java對象的注解來編寫xml文件,否則jaxb里面報錯很難查錯?。?!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区在线免费| 精品久久久久久国产| 91av网站在线播放| 九色精品美女在线| 亚洲偷熟乱区亚洲香蕉av| 992tv在线成人免费观看| 色视频www在线播放国产成人| 深夜福利91大全| 8090理伦午夜在线电影| 亚洲二区中文字幕| 欧美中文字幕在线视频| 欧美性精品220| 最好看的2019的中文字幕视频| 久久久精品久久久| 欧美不卡视频一区发布| 亚洲精品久久久久国产| 91欧美激情另类亚洲| 97在线视频免费看| 国产精品美女免费| 欧美日韩国产黄| 精品免费在线观看| 国产情人节一区| 欧美一区二区视频97| 欧美一级免费视频| 亚洲精品综合精品自拍| 亲子乱一区二区三区电影| 久久精品国产一区二区三区| 自拍偷拍亚洲区| 亚洲一级片在线看| 欧美风情在线观看| 国产亚洲人成a一在线v站| 国产成人精品久久| 日韩精品在线播放| 国产色视频一区| 亚洲欧美成人一区二区在线电影| 日本一区二区三区四区视频| 精品色蜜蜜精品视频在线观看| 欧美人与性动交| 国产精品美女久久久久av超清| 精品久久久久国产| 欧美成人精品激情在线观看| 亚洲色图狂野欧美| 亚洲精品一区二区三区不| 色偷偷偷亚洲综合网另类| 久久免费视频网| 亚洲人午夜精品| 欧美日韩人人澡狠狠躁视频| 欧美极品欧美精品欧美视频| 7m第一福利500精品视频| 欧美www视频在线观看| 欧美日韩加勒比精品一区| 亚洲欧美综合v| 日本精品视频在线观看| 精品国产户外野外| 国产精品久久久久久亚洲影视| 欧美xxxx综合视频| 精品免费在线视频| 国产免费一区二区三区香蕉精| 亚洲欧美在线免费观看| 国产精品吴梦梦| 成人免费在线网址| 日韩一级黄色av| 高清亚洲成在人网站天堂| 米奇精品一区二区三区在线观看| 欧美在线日韩在线| 国产成人精品免费久久久久| 国产日韩av高清| 视频在线一区二区| 国内揄拍国内精品| 亚洲激情视频在线观看| 欧美黑人极品猛少妇色xxxxx| 91免费版网站入口| 国产精品久久久久91| 成人久久18免费网站图片| 色吧影院999| 亚洲午夜久久久久久久| 中文字幕亚洲欧美日韩在线不卡| 57pao成人国产永久免费| 在线免费观看羞羞视频一区二区| 亚洲一区二区三区毛片| 欧美高清不卡在线| 日韩av在线直播| 午夜精品久久久久久99热| 91免费在线视频| 精品久久久久久久久久国产| 91久久久久久久一区二区| 午夜美女久久久久爽久久| 欧美精品在线视频观看| 欧美黑人视频一区| 亚洲综合在线中文字幕| 久久99精品久久久久久青青91| 国产欧美一区二区白浆黑人| 国产精品久久久久久久av大片| 欧美午夜女人视频在线| 亚洲国产精品女人久久久| 国产91免费看片| 日韩电影在线观看永久视频免费网站| 欧美日韩美女视频| 91精品视频在线看| 中文字幕一区二区三区电影| 日韩国产欧美精品一区二区三区| 久久久亚洲影院| 亚洲国产精品久久| 国产精品老女人精品视频| 91精品国产91久久久| 一区二区三区四区精品| 欧美专区在线观看| 5278欧美一区二区三区| 欧美床上激情在线观看| 日本久久中文字幕| 欧美激情国产日韩精品一区18| 一级做a爰片久久毛片美女图片| 国产一区二区三区中文| 中文精品99久久国产香蕉| 国产精品主播视频| 国产亚洲欧美另类中文| 日韩电影网在线| 中日韩午夜理伦电影免费| 欧洲一区二区视频| 久久夜色精品亚洲噜噜国产mv| 色无极影院亚洲| 蜜臀久久99精品久久久久久宅男| 日韩中文字幕视频| 久久亚洲精品中文字幕冲田杏梨| 久久免费精品视频| 日韩在线小视频| 久久久久久久久久久国产| 国产精品白嫩美女在线观看| 色偷偷91综合久久噜噜| 91久久精品视频| 亚洲免费视频网站| 欧美性猛交xxxx偷拍洗澡| 欧美成人午夜免费视在线看片| 亚洲欧洲av一区二区| 日韩美女av在线| 91av在线不卡| 国产91成人在在线播放| 久久精品一本久久99精品| 久久手机精品视频| 亚洲国产另类 国产精品国产免费| 国产999精品| 日本精品视频在线| 久久精品国产亚洲7777| 欧美一级淫片播放口| 韩日精品中文字幕| 国产综合视频在线观看| 欧美性感美女h网站在线观看免费| 美日韩精品免费观看视频| 亚洲成人网在线| 亚洲理论在线a中文字幕| 欧美孕妇孕交黑巨大网站| 欧美日韩久久久久| 欧美在线观看网站| 久久精品一偷一偷国产| 最新69国产成人精品视频免费| 日韩欧美国产一区二区| 日韩在线视频免费观看| 欧美日韩国产成人高清视频| 欧美裸体xxxx极品少妇| 这里只有精品在线播放| 欧美天堂在线观看| 韩曰欧美视频免费观看| 欧美激情xxxx| 成人a级免费视频|