专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

工具类 Java对象和XML之间的相互转换

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB)

  • JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
  • Marshaller接口,将Java对象序列化为XML数据。
  • Unmarshaller接口,将XML数据反序列化为Java对象。

JDK中JAXB相关的重要Annotation:(来源于百度百科JAXB)

在以上的注解中,用的最多的是@XMLType,@XmlAccessorType,@XmlRootElement。

例子:

最重要的进行Java对象和XML文件相互操作的核心代码XMLUtil.java,其中有着两种方式进行转换,一种是转换成对象和string类型的xml转换,一种是对象和xml文件进行转换。

import java.io.FileNotFoundException;  
import java.io.FileReader;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.io.StringReader;  
import java.io.StringWriter;  

import javax.xml.bind.JAXBContext;  
import javax.xml.bind.JAXBException;  
import javax.xml.bind.Marshaller;  
import javax.xml.bind.Unmarshaller;  

/** 
 * 封装了XML转换成object,object转换成XML的代码 
 *  
 * @author edison_kwok 
 *  
 */  
public class XMLUtil {  
    /** 
     * 将对象直接转换成String类型的 XML输出 
     *  
     * @param obj 
     * @return 
     */  
    public static String convertToXml(Object obj) {  
        // 创建输出流  
        StringWriter sw = new StringWriter();  
        try {  
            // 利用jdk中自带的转换类实现  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  

            Marshaller marshaller = context.createMarshaller();  
            // 格式化xml输出的格式  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,  
                    Boolean.TRUE);  
            // 将对象转换成输出流形式的xml  
            marshaller.marshal(obj, sw);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return sw.toString();  
    }  

    /** 
     * 将对象根据路径转换成xml文件 
     *  
     * @param obj 
     * @param path 
     * @return 
     */  
    public static void convertToXml(Object obj, String path) {  
        try {  
            // 利用jdk中自带的转换类实现  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  

            Marshaller marshaller = context.createMarshaller();  
            // 格式化xml输出的格式  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,  
                    Boolean.TRUE);  
            // 将对象转换成输出流形式的xml  
            // 创建输出流  
            FileWriter fw = null;  
            try {  
                fw = new FileWriter(path);  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            marshaller.marshal(obj, fw);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
    }  

    @SuppressWarnings("unchecked")  
    /** 
     * 将String类型的xml转换成对象 
     */  
    public static Object convertXmlStrToObject(Class clazz, String xmlStr) {  
        Object xmlObject = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(clazz);  
            // 进行将Xml转成对象的核心接口  
            Unmarshaller unmarshaller = context.createUnmarshaller();  
            StringReader sr = new StringReader(xmlStr);  
            xmlObject = unmarshaller.unmarshal(sr);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return xmlObject;  
    }  

    @SuppressWarnings("unchecked")  
    /** 
     * 将file类型的xml转换成对象 
     */  
    public static Object convertXmlFileToObject(Class clazz, String xmlPath) {  
        Object xmlObject = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(clazz);  
            Unmarshaller unmarshaller = context.createUnmarshaller();  
            FileReader fr = null;  
            try {  
                fr = new FileReader(xmlPath);  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            }  
            xmlObject = unmarshaller.unmarshal(fr);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return xmlObject;  
    }  
}

相关java bean的配置

import java.io.Serializable;  
import java.util.Date;  

import javax.xml.bind.annotation.XmlAccessType;  
import javax.xml.bind.annotation.XmlAccessorType;  
import javax.xml.bind.annotation.XmlRootElement;  
import javax.xml.bind.annotation.XmlType;  

/** 
 * 电脑类 
 *  
 * @author Steven 
 *  
 */  
@XmlAccessorType(XmlAccessType.FIELD)  
@XmlRootElement(name = "Computer")  
@XmlType(propOrder = { "serialNumber", "brandName", "productDate", "price" })  
public class Computer implements Serializable {  
    private static final long serialVersionUID = 1L;  

    // 序列号  
    private String serialNumber;  
    // 品牌名  
    private String brandName;  
    // 生成日期  
    private Date productDate;  
    // 价格  
    private double price;  

    public Computer() {  
        super();  
    }  

    public Computer(String serialNumber, String brandName, Date productDate,  
            double price) {  
        super();  
        this.serialNumber = serialNumber;  
        this.brandName = brandName;  
        this.productDate = productDate;  
        this.price = price;  
    }  

    public String getSerialNumber() {  
        return serialNumber;  
    }  

    public void setSerialNumber(String serialNumber) {  
        this.serialNumber = serialNumber;  
    }  

    public String getBrandName() {  
        return brandName;  
    }  

    public void setBrandName(String brandName) {  
        this.brandName = brandName;  
    }  

    public Date getProductDate() {  
        return productDate;  
    }  

    public void setProductDate(Date productDate) {  
        this.productDate = productDate;  
    }  

    public double getPrice() {  
        return price;  
    }  

    public void setPrice(double price) {  
        this.price = price;  
    }  
}

import java.io.Serializable;  
import java.util.Date;  
import java.util.List;  

import javax.xml.bind.annotation.XmlAccessType;  
import javax.xml.bind.annotation.XmlAccessorType;  
import javax.xml.bind.annotation.XmlRootElement;  
import javax.xml.bind.annotation.XmlType;  

/** 
 *  
 * @author Steven 
 *  
 */  
@XmlAccessorType(XmlAccessType.FIELD)  
// XML文件中的根标识  
@XmlRootElement(name = "User")  
// 控制JAXB 绑定类中属性和字段的排序  
@XmlType(propOrder = {   
        "userId",   
        "userName",   
        "password",   
        "birthday",   
        "money",   
        "computers"  
})  
public class User implements Serializable {  
    private static final long serialVersionUID = 1L;  

    // 用户Id  
    private int userId;  
    // 用户名  
    private String userName;  
    // 用户密码  
    private String password;  
    // 用户生日  
    private Date birthday;  
    // 用户钱包  
    private double money;  
    // 拥有的电脑  
    private List<Computer> computers;  

    public User() {  
        super();  
    }  

    public User(int userId, String userName, String password, Date birthday,  
            double money) {  
        super();  
        this.userId = userId;  
        this.userName = userName;  
        this.password = password;  
        this.birthday = birthday;  
        this.money = money;  
    }  

    public int getUserId() {  
        return userId;  
    }  

    public void setUserId(int userId) {  
        this.userId = userId;  
    }  

    public String getUserName() {  
        return userName;  
    }  

    public void setUserName(String userName) {  
        this.userName = userName;  
    }  

    public String getPassword() {  
        return password;  
    }  

    public void setPassword(String password) {  
        this.password = password;  
    }  

    public Date getBirthday() {  
        return birthday;  
    }  

    public void setBirthday(Date birthday) {  
        this.birthday = birthday;  
    }  

    public double getMoney() {  
        return money;  
    }  

    public void setMoney(double money) {  
        this.money = money;  
    }  

    public void setComputers(List<Computer> computers) {  
        this.computers = computers;  
    }  

    public List<Computer> getComputers() {  
        return computers;  
    }  

    @Override  
    public String toString() {  
        return "User [birthday=" + birthday + ", computers=" + computers  
                + ", money=" + money + ", password=" + password + ", userId="  
                + userId + ", userName=" + userName + "]";  
    }  

}

文章永久链接:https://tech.souyunku.com/18434

未经允许不得转载:搜云库技术团队 » 工具类 Java对象和XML之间的相互转换

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们