利用jdk6中Annotation将XML与对象之间互相转化(一)

来源:互联网 发布:早晨 句子 知乎 编辑:程序博客网 时间:2024/05/19 02:39

开发中我们常会用到将XML与对象之间互相转化,下面是利用Annotation注解的方式进行两者之间的互相转化


注意:对象中的属性字段需要和xml文件中的元素名称保持一致(大小写也要一致),如果不一致,必须在注解中指定name属性

首页给大家看一下目录结构:



XML格式一

1、students.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><students><student idcard="001" age="18" name="小红"><basicinfo><school>中科大</school><tel>18399990099</tel></basicinfo><workinfo><company>科大讯飞</company><tel>19888888888</tel></workinfo></student></students>

2、StudentConfig.java(定义外层students元素)
/* * Copyright @ 2015 com.iflysse.trains * MyTest 下午4:17:33 * All right reserved. * */package com.xml.obj.test2;import java.util.List;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;import com.alibaba.fastjson.JSON;/** * @desc: MyTest * @author: kpchen * @createTime: 2015年8月19日 下午4:17:33 * @history: * @version: v1.0 */@XmlRootElement(name = "students")@XmlAccessorType(XmlAccessType.FIELD)public class StudentConfig {@XmlElement(name = "student")private List<Student> list;public List<Student> getList() {return list;}public void setList(List<Student> list) {this.list = list;}@Overridepublic String toString() {return JSON.toJSONString(this);}}

3、Student.java(定义student元素)
/* * Copyright @ 2015 com.iflysse.trains * MyTest 下午4:18:30 * All right reserved. * */package com.xml.obj.test2;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import com.alibaba.fastjson.JSON;/** * @desc: MyTest * @author: kpchen * @createTime: 2015年8月19日 下午4:18:30 * @history: * @version: v1.0 */@XmlAccessorType(XmlAccessType.FIELD)public class Student {@XmlElement(name = "basicinfo")private BasicInfo basicinfo;@XmlElement(name = "workinfo")private WorkInfo workinfo;@XmlAttributeprivate String idcard;@XmlAttributeprivate String age;@XmlAttributeprivate String name;public BasicInfo getBasicinfo() {return basicinfo;}public void setBasicinfo(BasicInfo basicinfo) {this.basicinfo = basicinfo;}public WorkInfo getWorkinfo() {return workinfo;}public void setWorkinfo(WorkInfo workinfo) {this.workinfo = workinfo;}public String getIdcard() {return idcard;}public void setIdcard(String idcard) {this.idcard = idcard;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return JSON.toJSONString(this);}}

4、BasicInfo.java(定义student元素中的basicinfo元素)
/* * Copyright @ 2015 com.iflysse.trains * MyTest 下午4:24:04 * All right reserved. * */package com.xml.obj.test2;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import com.alibaba.fastjson.JSON;/** * @desc: MyTest * @author: kpchen * @createTime: 2015年8月19日 下午4:24:04 * @history: * @version: v1.0 */@XmlAccessorType(XmlAccessType.FIELD)public class BasicInfo {@XmlElementprivate String school;@XmlElementprivate String tel;public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}@Overridepublic String toString() {return JSON.toJSONString(this);}}

5、WorkInfo.java(定义student元素中的workinfo元素)
/* * Copyright @ 2015 com.iflysse.trains * MyTest 下午4:24:10 * All right reserved. * */package com.xml.obj.test2;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import com.alibaba.fastjson.JSON;/** * @desc: MyTest * @author: kpchen * @createTime: 2015年8月19日 下午4:24:10 * @history: * @version: v1.0 */@XmlAccessorType(XmlAccessType.FIELD)public class WorkInfo {@XmlElementprivate String company;@XmlElementprivate String tel;public String getCompany() {return company;}public void setCompany(String company) {this.company = company;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}@Overridepublic String toString() {return JSON.toJSONString(this);}}

6、XmlParser.java(测试类)
package com.xml.obj.test2;import java.io.StringReader;import java.io.StringWriter;import java.util.ArrayList;import java.util.List;import javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;/** * Created by admin on 2015/8/12. */public class XmlParser {public static XmlParser insetance;private XmlParser() {}public static XmlParser getInstance() {if (insetance == null) {return new XmlParser();} else {return insetance;}}/* 将对象转为xml */public String mshall(Object oc, Class<?> cc) throws Exception {JAXBContext cxt = JAXBContext.newInstance(cc);Marshaller mm = cxt.createMarshaller();StringWriter writer = new StringWriter();mm.marshal(oc, writer);return writer.toString();}/* 将xml转对象 */public Object unmashall(String xmlString, Class<?> cc) throws Exception {JAXBContext cxt = JAXBContext.newInstance(cc);Unmarshaller unm = cxt.createUnmarshaller();Object cnt = unm.unmarshal(new StringReader(xmlString));return cnt;}public static void main(String[] args) throws Exception {// test_unmashall();test_mshall();}private static void test_mshall() {BasicInfo bi = new BasicInfo();bi.setSchool("中科大");bi.setTel("18399990099");WorkInfo wi = new WorkInfo();wi.setCompany("科大讯飞");wi.setTel("19888888888");Student stu = new Student();stu.setBasicinfo(bi);stu.setWorkinfo(wi);stu.setAge("18");stu.setIdcard("001");stu.setName("小红");List<Student> list = new ArrayList<Student>();list.add(stu);StudentConfig sc = new StudentConfig();sc.setList(list);try {String xmlString = XmlParser.getInstance().mshall(sc, StudentConfig.class);System.out.println(xmlString);} catch (Exception e) {}}private static void test_unmashall() {String x2 = "<students><student idcard='101' age='28' name='小红'><basicinfo><school>中科大</school><tel>18399990099</tel></basicinfo><workinfo><company>科大讯飞</company><tel>19888888888</tel></workinfo></student><student idcard='001' age='18' name='小红'><basicinfo><school>中科大</school><tel>18399990099</tel></basicinfo><workinfo><company>科大讯飞</company><tel>19888888888</tel></workinfo></student></students>";try {StudentConfig ff = (StudentConfig) XmlParser.getInstance().unmashall(x2, StudentConfig.class);List<Student> ops = ff.getList();for (Student op : ops) {System.out.println(op.toString());}} catch (Exception e) {e.printStackTrace();}}}

源码:http://pan.baidu.com/s/1dD2NWad
0 0
原创粉丝点击