利用jdk6中Annotation将XML与对象之间互相转化(一)
2015-08-19 17:18
741 查看
开发中我们常会用到将XML与对象之间互相转化,下面是利用Annotation注解的方式进行两者之间的互相转化
注意:对象中的属性字段需要和xml文件中的元素名称保持一致(大小写也要一致),如果不一致,必须在注解中指定name属性
首页给大家看一下目录结构:
2、StudentConfig.java(定义外层students元素)
3、Student.java(定义student元素)
4、BasicInfo.java(定义student元素中的basicinfo元素)
5、WorkInfo.java(定义student元素中的workinfo元素)
6、XmlParser.java(测试类)
源码:http://pan.baidu.com/s/1dD2NWad
注意:对象中的属性字段需要和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; } @Override public 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; @XmlAttribute private String idcard; @XmlAttribute private String age; @XmlAttribute private 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; } @Override public 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 { @XmlElement private String school; @XmlElement private 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; } @Override public 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 { @XmlElement private String company; @XmlElement private 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; } @Override public 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
相关文章推荐
- Java的Timer和TimerTask
- Introduction to Java Programming编程题3.27<判断点是否在三角形内>
- 关于java中split的使用
- eclipse 搭建activiti5.17项目生成流程过程
- java实现String,date,timestamp相互转换
- Eclipse Java注释模板设置详解
- Java 四舍五入保留小数点后两位
- MyEclipse中使用JUnit进行单元测试
- Java复习笔记:Java中的sleep()和wait()的区别
- Java面向对象--封装
- Java阻塞队列的实现
- java图形验证码生成工具类
- java代码--线程的死锁
- Java面向对象--继承
- JAVA IO流(2)
- java.io.IOException: Negative seek offset
- Spring如何实现自动依赖注入-------autowire
- java使用Xstream注解 解析xml文件 并将数据导入MySql数据库中
- Java下如何启动windows 的程序
- Introduction to Java Programming编程题6.1<为学生分数转换为ABCDF>