二、XML与Java类映射JAXB

来源:互联网 发布:java编程思想视频网盘 编辑:程序博客网 时间:2024/05/17 07:49

1、什么是XML与Java类映射

            在java程序中,通常XML数据文件要解析成一个Java对象,比如说这样一个XML数据文件,代码如下:

<?xml version ="1.0" enconding="UTF-8" standalone="yes"?><article>       <author>Janet</author>       <date>20080202</date>       <email>janet@yahoo.cn</email>       <title>XML</title></article>
     还有一个Java类Article,它是一个普通的POJO对象,代码如下:(getter,settet方法略)
public class Article{   private String title;   private String author;   private String email;   private String date;}    

           现在想让XML中的<article>  元素的数据装载到Article对象中,XML中的<title>对应Java类中的title,XML中的<author>对应Java类中的author......,这种XML数据与JAVA类之间的对应关系,就是一种映射。

    2、JAXB的工作原理

          与Hibernate映射类似,JAXB映射主要有4个部分组成:Schema、JAXB、XML文档、JAVA对象,如图:


                                 

        Schema可以看做是数据库中的表结构,Document(XML文档)是表中的一条条数据,而JAXB可以看作是Hibernate,它提供Schema到Java对象的映射,类似xxx.hbm的映射文件。

         XML转换到Java对象的过程叫做unmarshal。

         Java对象转换到XML的过程叫做marshal。

      3、Java对象转化为XML(marshal)

         在JDK6中,JAXB中的可以通过标注Annotation来映射,这样编写映射就容易多了。Article类通过标注映射后,代码如下:

          

import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;public class XmlToJava {public void JAXBDemo1(){      //创建XML文档File xmlFile =  new File("F:\\test.xml");//声明JAXBContext对象JAXBContext jcontext;try{//通过映射上下文关系jcontext = JAXBContext.newInstance(Article.class);//创建XML文件到JAVA对象的Unmasheller对象Unmarshaller u = jcontext.createUnmarshaller();Article article = (Article)u.unmarshal(xmlFile);System.out.println(article.getTitle());        System.out.println(article.getAuthor());System.out.println(article.getDate());System.out.println(article.getEmail());}catch(JAXBException e){e.printStackTrace();}}}

总结几个需要注意的问题:

        (1)通过标注  @XmlRootElement用于标注XML的根元素。

        (2)一旦类标注了根元素,那么这个类的所有属性,默认映射为根元素的子元素。

    4、XML转化为Java对象(unmarshal)

           

import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;public class JavaToXml {/** * @param args */public void JAXBDemo(){//创建xml文档对象File xmlFile = new File("F:\\test.xml");//声明JAXBContext上下文对象JAXBContext jc;try{//通过指定影射的类创建上下文jc = JAXBContext.newInstance(Article.class);//通过上下文创建java转化成xml的对象MarshallerMarshaller m = jc.createMarshaller();Article article =  new Article(); //创建XML中的数据article.setTitle("围城");article.setAuthor("钱锺书");article.setDate("1945");article.setEmail("qzs@sina.com");m.marshal(article,xmlFile);  //将JAVA对象转化到xml中}catch(JAXBException e){e.printStackTrace();}}}













0 0
原创粉丝点击