XML工具类

package com.wuxicloud.util;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.File;
import java.io.StringReader;
import java.io.StringWriter;

/**
 * Created by  EalenXie on 2018/6/11 11:34
 * Notice : Class对象必须满足XML对象定义规范
 * Class对象上面至少必须至少要有XML根节点注解 @XmlRootElement(name = "xxxx") 和节点注解(属性能被转换成xml)@XmlAccessorType(XmlAccessType.FIELD)
 */
public enum XMLUtils {

    getXMLUtil;

    /**
     * @param obj   要转换的对象引用(xxx)
     * @param clazz 要转换的对象类型(xxx.class)
     * @return 将Java对象转成XML字符串
     */
    public String beanToXml(Object obj, Class<?> clazz) throws JAXBException {
        StringWriter writer = new StringWriter();
        Marshaller marshaller = JAXBContext.newInstance(clazz).createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        marshaller.marshal(obj, writer);
        return writer.toString().replace("standalone=\"yes\"", "");
    }

    /**
     * @param xmlStr XML的String
     * @param clazz  要转换成的对象类型
     * @return 将XML的字符串(String)转换成对象(Object)
     */
    public Object xmlToBean(String xmlStr, Class<?> clazz) throws Exception {
        StringReader sr = new StringReader(xmlStr);
        return JAXBContext.newInstance(clazz).createUnmarshaller().unmarshal(sr);
    }

    /**
     * @param xmlFile XML文件对象
     * @param clazz   Java对象类型
     * @return 将XML文件数据反序列化为Java对象。
     * Notice : 该文件对象的属性必须和Java对象类型的属性一一对应
     */
    public Object xmlFileToBean(File xmlFile, Class clazz) throws JAXBException {
        return JAXBContext.newInstance(clazz).createUnmarshaller().unmarshal(xmlFile);
    }


}

声明User对象进行测试 :

package com.wuxicloud.util;

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

/**
 * Created by  EalenXie on 2018/6/11 12:58
 */
@XmlRootElement(name = "User")
@XmlAccessorType(XmlAccessType.FIELD)
public class User {
    private String username;
    private String password;

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

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

测试一下 : 

package com.wuxicloud.util;

import javax.xml.bind.JAXBException;
import java.io.File;

/**
 * Created by  EalenXie on 2018/6/11 12:31
 */
public class TestRun {

    public static void main(String[] args) throws Exception {
        User user = new User();
        user.setUsername("EalenXie");
        user.setPassword("admin");
        //将Bean转换成Xml字符串
        String beanToXmlResult = XMLUtils.getXMLUtil.beanToXml(user, User.class);
        System.out.println(beanToXmlResult);
        //将XML文件转成Java对象
        File file = new File("C:\\EalenXie\\Temp\\User.xml");
        User u = (User) XMLUtils.getXMLUtil.xmlFileToBean(file, User.class);
        System.out.println(u);
        //将XML字符串转成Java对象
        String xmlStr = "<User><username>李四</username><password>456</password></User>";
        User us = (User) XMLUtils.getXMLUtil.xmlToBean(xmlStr, User.class);
        System.out.println(us);
    }
}

可以看到控制台打印 : 

 

猜你喜欢

转载自www.cnblogs.com/ealenxie/p/9166685.html