二、XML与Java类映射JAXB

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的对象Marshaller
			Marshaller 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();
		}
		
	}
	
}













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值