Java对象转换XML的过程叫marshal。
XML转换到Java对象的过程叫unmarshal。
一、Java对象转化为XML
package com.gstarcad.fei.xml.vo;/**
* @Title: ${file_name}
* @Package ${package_name}
* @Description:
* @author fengzf fengzf@gstarcad.com
* @date 2018/9/19 13:08
* @version Vxxx (项目版本)
* @redmine
* @update @Description TODO(这里用一句话描述这个方法的作用)
* @update @author fengzf fengzf@gstarcad.com
* @update @date 2018/9/19 13:08
*/
import javax.xml.bind.annotation.XmlRootElement;
/**
* @ClassName: Article.java
* @Description:
* @author: fengzf fengzf@gstarcad.com
* @Date: 2018/9/19 13:08
*
*/
@XmlRootElement
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;
}
}
通过标注@XMLRootElement用于标注XML的根元素。这个类的所有属性默认映射为根元素的子元素。
public static void main(String args[]) {
//创建XML文档对象
File xmlFile = new File("C:\\Users\\admin\\Desktop\\test.xml");
//声明上下文文件
JAXBContext context;
try{
context = JAXBContext.newInstance(Article.class);
//通过上下文创建Java转化为XML的对象Marshaller
Marshaller m = context.createMarshaller();
Article article = new Article();
article.setAuthor("张飞");
article.setDate("20180919");
article.setEmail("364929989@qq.com");
article.setTitle("XML");
m.marshal(article,xmlFile); //将对象转化到XML中去
}catch(Exception e){
e.printStackTrace();
}
}
运行代码后,将生成一个C:\Users\admin\Desktop\test.xml文件,其数据为
二、XML转化为Java对象
public static void main(String args[]) {
//创建XML文档对象
File xmlFile = new File("C:\\Users\\admin\\Desktop\\test.xml");
//声明上下文文件
JAXBContext context;
try {
context = JAXBContext.newInstance(Article.class);
//通过上下文创建XML转化为Java的对象Marshaller
Unmarshaller u = context.createUnmarshaller();
Article article = (Article)u.unmarshal(xmlFile);
System.out.println(article.getTitle());
System.out.println(article.getAuthor());
}catch (Exception e){
e.printStackTrace();
}
}
代码运行如下
三、更为复杂的映射
将XML中数据读到ArticleData中,类中有一个List,保存每条article数据
@XmlRootElement(name="articles")
public class ArticleData {
List<Article> article = new ArrayList<Article>();
public List<Article> getArticle() {
return article;
}
public void setArticle(List<Article> article) {
this.article = article;
}
}
public static void main(String args[]) {
//创建XML文档对象
File xmlFile = new File("C:\\Users\\admin\\Desktop\\test.xml");
//声明上下文文件
JAXBContext context;
try {
context = JAXBContext.newInstance(ArticleData.class);
//通过上下文创建XML转化为Java的对象Marshaller
Unmarshaller u = context.createUnmarshaller();
ArticleData articleData = (ArticleData)u.unmarshal(xmlFile);
List<Article> articles = articleData.getArticle();
for(Article article:articles){
System.out.println("----------------------------");
System.out.println(article.getTitle());
System.out.println(article.getAuthor());
}
}catch (Exception e){
e.printStackTrace();
}
}