前几天学习了用Marshaller 来实现Java对象与xml的互转,现在记录一下笔记,以便以后查阅。
Marshaller 类负责管理将 Java 内容树序列化回 XML 数据的过程。
话不多说,直接上代码。
首先这里需要建立两个类 Article 和 ArticleList , 这就是需要序列化到XML的对象。。注意XmlRootElement注解
package object2XML;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="article")
public class Article{
private String title;
private String author;
private String email;
private String date;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
package object2XML;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="articleList")
public class ArticleList {
List<Article> articleList = new ArrayList<Article>();
public List<Article> getArticleList() {
return articleList;
}
public void setArticleList(List<Article> articleList) {
this.articleList = articleList;
}
}
然后开始Java对象和XML的互转。。。代码很简单,就不多说了。。
首先是Object2XML
package object2XML;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class Object2XML {
public static void main(String [] args){
File xmlFile = new File("G:\\test.xml");
JAXBContext context ; //声明JAXBContext上下文对象
try{ //通过指定的类创建上下文对象
context= JAXBContext.newInstance(Article.class);
Marshaller marshaller =context.createMarshaller();
Article article = new Article();
article.setAuthor("Jerry");
article.setDate("2014-9-21");
article.setEmail("Jerry@yahoo.com");
article.setTitle("XML概述");
//将Java对象转换成xml文件
marshaller.marshal(article,xmlFile);
}catch(JAXBException e){
e.printStackTrace();
}
}
}
然后 XML2Object
package object2XML;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class XML2Object {
/**
* @param args
* @throws JAXBException
*/
public static void main(String[] args) throws JAXBException {
// TODO Auto-generated method stub
JAXBContext context ; //声明JAXBContext上下文对象
File xmlFile = new File("G:\\test.xml");
context =JAXBContext.newInstance(Article.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Article article= (Article)unmarshaller.unmarshal(xmlFile);
System.out.println(article.getAuthor());
System.out.println(article.getDate());
System.out.println(article.getEmail());
System.out.println(article.getTitle());
}
}
然后是List和XML的互转。。
List2XML
package object2XML;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class List2XML {
/**
* @param args
* @throws JAXBException
*/
public static void main(String[] args) throws JAXBException {
// TODO Auto-generated method stub
File xmlFile = new File("G:\\test2.xml");
JAXBContext context ; //声明JAXBContext上下文对象
context= JAXBContext.newInstance(ArticleList.class);
Marshaller marshaller =context.createMarshaller();
ArticleList articleList = new ArticleList();
Article article = new Article();
article.setAuthor("Jerry");
article.setDate("2014-9-21");
article.setEmail("Jerry@yahoo.com");
article.setTitle("XML概述");
Article article2 = new Article();
article2.setAuthor("Tom");
article2.setDate("2014-10-21");
article2.setEmail("Jerry@sina.com");
article2.setTitle("XML概述222");
List<Article> list = new ArrayList<Article> ();
list.add(article);
list.add(article2);
articleList.setArticleList(list);
//将Java对象转换成xml文件
marshaller.marshal(articleList,xmlFile);
}
}
然后XML2List
package object2XML;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class XML2List {
/**
* @param args
* @throws JAXBException
*/
public static void main(String[] args) throws JAXBException {
// TODO Auto-generated method stub
JAXBContext context ; //声明JAXBContext上下文对象
File xmlFile = new File("G:\\test2.xml");
context =JAXBContext.newInstance(ArticleList.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
ArticleList articleList= ( ArticleList)unmarshaller.unmarshal(xmlFile);
System.out.println(articleList.getArticleList().get(0).getAuthor());
System.out.println(articleList.getArticleList().get(1).getAuthor());
}
}
这样就差不多完成了,最后注意一下 对象类注解那里 @XmlRootElement(name="articleList") 这里的name是 articleList ,对应着从XML转化成list的时候 ArticleList articleList= ( ArticleList)unmarshaller.unmarshal(xmlFile); 必须用相同的名字的对象来接收(articleList), 不然会报错的。。。
是不是很简单呢,小伙伴们也赶紧试试吧。。。
最后附上例子的源码 : http://download.csdn.net/detail/y353027520dx/8439617 大家可以直接下载了运行试试看。。。