浅谈XML 解析技术(五) Jaxb解析
2015-10-29 15:24
471 查看
1.【项目包结构如图】 bean 目录下的bean是由xjc 命令根据xsd 文件生成的对象,具体反转方法参见笔者的另一篇博客:xml--> javabean
【2. students_jaxb.xml】
【2. JaxbUtils: jaxb 解析工具类】
【3. JaxbParseXml】
【注:源代码下载
D_parse_xml.zip】
【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 xml xml片段 * @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; } /** * @Description javaBean 对象转换成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 */ @Test public 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 */ @Test public 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】
相关文章推荐
- "不受束缚"的产品设计
- 程序员的故事【番外篇一】
- windows下用GCC编译DLL
- sip常用消息实体参考(系网上摘抄,感谢分享)
- 什么是json以及json解析
- xmanager连接Centos的远程桌面
- Swift属性(Properties)
- Cocos开发中性能优化工具介绍之Xcode中Instruments工具使用
- webservice
- php数据库编程---mysql扩展库
- kettle工具导出excel报错内存溢出的解决方法GC overhead limit exceeded
- OpenDaylight融合OpenStack架构分析
- int main(int argc, char *argv[])中argc和argv的解释
- Dialog中隐藏软键盘
- jQuery-easyUI的使用:基本组件的使用、使用组件的两种方式
- Ubuntu下安装、配置FTP服务
- MySQL系列:查看并修改当前数据库的编码
- 设计模式/原则篇- Unit of Work
- android:scaleType属性
- Xcode7 Cocoapods 安装或更新出现错误