浅谈XML 解析技术(五) Jaxb解析
来源:互联网 发布:收看日本电视台软件 编辑:程序博客网 时间:2024/06/13 13:38
1.【项目包结构如图】 bean 目录下的bean是由xjc 命令根据xsd 文件生成的对象,具体反转方法参见笔者的另一篇博客:xml--> javabean
【2. students_jaxb.xml】
<?xml version="1.0" encoding="UTF-8"?><Students> <Student grade="2"> <Name>zong_0</Name> <Age>20</Age> <Sex>boy</Sex> <Number>1000</Number> <Address>beijing No.0</Address> </Student> <Student grade="1"> <Name>zong_1</Name> <Age>21</Age> <Sex>girl</Sex> <Number>1001</Number> <Address>beijing No.1</Address> </Student> <Student grade="2"> <Name>zong_2</Name> <Age>22</Age> <Sex>boy</Sex> <Number>1002</Number> <Address>beijing No.2</Address> </Student> <Student grade="1"> <Name>zong_3</Name> <Age>23</Age> <Sex>girl</Sex> <Number>1003</Number> <Address>beijing No.3</Address> </Student> <Student grade="2"> <Name>zong_4</Name> <Age>24</Age> <Sex>boy</Sex> <Number>1004</Number> <Address>beijing No.4</Address> </Student> <Student grade="1"> <Name>zong_5</Name> <Age>25</Age> <Sex>girl</Sex> <Number>1005</Number> <Address>beijing No.5</Address> </Student> <Student grade="2"> <Name>zong_6</Name> <Age>26</Age> <Sex>boy</Sex> <Number>1006</Number> <Address>beijing No.6</Address> </Student> <Student grade="1"> <Name>zong_7</Name> <Age>27</Age> <Sex>girl</Sex> <Number>1007</Number> <Address>beijing No.7</Address> </Student> <Student grade="2"> <Name>zong_8</Name> <Age>28</Age> <Sex>boy</Sex> <Number>1008</Number> <Address>beijing No.8</Address> </Student> <Student grade="1"> <Name>zong_9</Name> <Age>29</Age> <Sex>girl</Sex> <Number>1009</Number> <Address>beijing No.9</Address> </Student></Students>
【2. JaxbUtils: jaxb 解析工具类】
package org.zgf.xml.jaxb;import java.io.ByteArrayInputStream;import java.io.StringWriter;import javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;/** * @Description: xml 解析工具类 * @author zonggf * @date 2015年10月29日-下午1:27:08 */public class JaxbUtlis {private static String ENCODING = "UTF-8";private static void setENCODING(String encoding){ENCODING = encoding;}/** * @Description 将xml 文件转换成对象 * @param xmlxml片段 * @param T要转换的对象类名称 * @return T * @author zonggf * @date 2015年10月29日-下午1:27:48 */ @SuppressWarnings("unchecked") public static <T> T unmarshall(String xml, Class<T> T) { try { JAXBContext jaxbContext = JAXBContext.newInstance(T); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); T re = (T) unmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes(ENCODING))); return re; } catch (Exception ex) { ex.printStackTrace(); } return null; } /** * @DescriptionjavaBean 对象转换成xml字符串 * @param obj 要转换的JavaBean对象 * @return String * @author zonggf * @date 2015年10月29日-下午1:28:26 */ public static String marshall(Object obj) { try { JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_ENCODING, ENCODING); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); StringWriter stringWriter = new StringWriter(); marshaller.marshal(obj, stringWriter); return stringWriter.toString(); } catch (Exception ex) { ex.printStackTrace(); } return null; }}
【3. JaxbParseXml】
package org.zgf.xml.jaxb;import java.util.ArrayList;import java.util.List;import org.junit.Test;import org.zgf.util.FileTextUtil;import org.zgf.xml.jaxb.bean.Student;import org.zgf.xml.jaxb.bean.Students;/** * @Description: 将 xml 文档转换成javabean 对象 * @author zonggf * @date 2015年10月29日-下午1:44:15 */public class JaxbParseXml {private static String fileName = "xml/students_jaxb.xml";/** 初始化studentList 对象 */private static List<Student> initStudents() {List<Student> students = new ArrayList<>();for (int i = 0; i < 10; i++) {Student student = new Student();student.setNumber("100" + i);student.setName("zong_" + i);student.setAge("" + (20 + i));if (i % 2 == 0) {student.setGrade("2");student.setSex("boy");} else {student.setGrade("1");student.setSex("girl");}student.setAddress("beijing No." + i);students.add(student);}return students;}/** 测试生成xml */@Testpublic void test_createXMLFile(){Students students = new Students();students.setStudent(initStudents());String xmlContent = JaxbUtlis.marshall(students);String xmlHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";//写入文件FileTextUtil.string2File(fileName, xmlHeader + xmlContent);System.out.println("finish...");}/** 测试读取xml */@Testpublic void test_readXMLFile() {String xmlStr = FileTextUtil.txtFile2String(fileName);Students students = JaxbUtlis.unmarshall(xmlStr, Students.class);List<Student> studentList = students.getStudent();for (Student student : studentList) {System.out.println(student);}}}
【注:源代码下载 D_parse_xml.zip】
1 0
- 浅谈XML 解析技术(五) Jaxb解析
- 浅谈XML 解析技术(六)Jaxb 解析对象之手工编写xml映射类
- XML解析技术浅谈
- JAXB解析xml
- JAXB解析XML
- JAXB解析xml
- JAXB解析XML
- JAXB解析xml
- jaxb解析xml
- JAXB解析xml实例
- JAXB解析xml
- JAXB解析XML
- JAXB解析xml
- JAXB解析生成xml
- jaxb解析xml
- JAXB解析XML
- JAXB解析XML文件
- jaxb解析xml
- oracle读取char(2)字符型数据
- 纽约大学Yann LeCun深度学习
- 站在巨人的肩膀上,C++开源库大全
- 编译内核模块之 Makefile
- Android中自定义属性的使用
- 浅谈XML 解析技术(五) Jaxb解析
- MFC 刷新View的背景颜色
- 【数据结构与算法分析】1.2 编写程序解决字谜问题
- 【分享】山田君与7个魔女共12集全+OVA中文字幕下载
- Android 如何解决dialog弹出时无法捕捉Activity的back事件
- android找不到.xml和资源文件
- 在windows下进行linux开发:利用Vagrant+virtualbox
- 淘宝动态配置diamond-server 源码讲解
- LeetCode 264: Ugly Number II