利用JAXB进行xml和javabean之间转换

来源:互联网 发布:sql身份证取年龄 编辑:程序博客网 时间:2024/05/16 14:53

 Xml和javabean之间的互相转换是开发中常常遇到的问题,今天小试了一下JAXB,感觉真是太方便了,这里特此记录(JDK6中加入了JAXB,不需要额外导出包) 

     利用JAXB实现XML与Javabean之间的相互转换的大致思想:利用XML的生成相应的XSD或者DTD,然后利用该XSD或DTD生成对应的javabeanClass和ObjectFactory, 网上找个一个来描述了这个步骤:



 一些名词:

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。

DTD (Documnet Type Definition) 即文档类型定义,是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是XML文件的验证机制,属于XML文件组成的一部分。

XSD(XML Schema Definition,XSD) XML Schema 定义, 是基于 XML 的 DTD 替代者

 

开始转换 

一.  利用XML生成相应XSD或者DTD

      1. 生成XSD可以通过一个online工具完成.

             网址: http://www.freeformatter.com/xsd-generator.html#ad-output

   

       2.  生成DTD,通过一个java小工具:http://sourceforge.net/projects/xml2dtd/


 

 

二.  利用生成的XSD或者DTD生成java类: 

     1. 命令行的方式(jdk6的支持)

            (a)  XSD生成java: cmd--> cd xsd所在文件夹--> xjc  –d  .  –p  包名  ./test.xsd

            (b)  DTD生成java: cmd --> cd DTD所在文件夹 --> xjc  -dtd  –d  .  –p  包名  ./test.dtd

      2. Eclipse下面生成java类,此方法只针对xsd,选中你的xsd,右键:



           然后选择包等操作,一步一步就可以生成了.

    注意:XML里面最好不要包含value等敏感关键字,如果包含.先用别的名词替换,当生成javabean后再修改javabean.

 

 

三. 利用生成javabean来进行xml和java之间的转换

 a> XML到javabean 

Java代码  收藏代码
  1. File file = new File("C:/ML_OA_DATA.xml");  
  2. String xmlStr = FileUtils.readFileToString(file , "UTF-8");  
  3. Reader reader = new StringReader(xmlStr);  
  4.  Unmarshaller unmarshaller =  JAXBContext.newInstance(Result.class).createUnmarshaller();       
  5. Result result = (Result) unmarshaller.unmarshal(reader);   
  6. List<Result.DocInfo.Field> list = result.getDocInfo().getField();  
  7. List<Attachment> eFileList = result.getAttachments().getAttachment();  
  8. for (Attachment efile : eFileList) {  
  9.         System.out.println(efile.getFtpdir());  
  10. }  

 核心的就是这2句,1 注册对象,2反序列化
Unmarshaller unmarshaller =  JAXBContext.newInstance(Result.class).createUnmarshaller();
Result result = (Result) unmarshaller.unmarshal(reader); 
unmarshal可以接收inputstream , read , file等.这里是通过string转换成reader 
b> javabean到XML 
Java代码  收藏代码
  1. Marshaller mashaller =  JAXBContext.newInstance(Result.class).createMarshaller();  
  2. ObjectFactory factory = new ObjectFactory();  
  3. Result toxmlResult = factory.createResult();  
  4. //可选 开始  
  5. Field theField = factory.createResultDocInfoField();  
  6. theField.setColName("ssss");  
  7. DocInfo dii = factory.createResultDocInfo();  
  8. dii.getField().add(theField);  
  9. toxmlResult.setDocInfo(dii);  
  10. //可选 结束  
  11. mashaller.marshal(toxmlResult, new File("c:/outPut.xml"));  

核心: 注册对象 和序列化

Marshaller mashaller =  JAXBContext.newInstance(Result.class).createMarshaller();

mashaller.marshal(toxmlResult, new File("c:/outPut.xml"));

0 0