通过JAXB完成Java对象与XML之间的转换

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();
        }
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

snowflakefengzf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值