自制Object转XML工具类

这是一个使用Java基础和递归方法编写的XML转换工具,能够将Java对象、集合以及嵌套对象转换为XML格式的文本。主要方法包括objectToXML和arrayToXML,分别处理单个对象和集合类型的转换,同时支持自定义根节点名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用Java基础知识以及递归做的一个简略版的XML转换工具,可以将集合、对象以及嵌套对象自动转换为XML格式的文本

import java.lang.reflect.Field;
import java.util.*;

/**
 * @author ShangXiangYang
 * @date 2022/1/28 15:19
 */
public class XMLUtil {

    /**
     * object转XML入口
     * @param obj 待转换对象
     * @return xml格式的字符串
     * @throws Exception 异常
     */
    public static String toXML(Object obj) throws Exception {
        String xml = "";
        if (null == obj){
            throw new Exception("object对象为空,无法转换!");
        }

        if (obj instanceof Collection){
            xml = arrayToXML(obj);
        }else {
            xml = objectToXML(obj);
        }
        return xml;
    }

    /**
     * object转XML入口
     * @param obj 待转换对象
     * @param rootName 根节点名称
     * @return xml格式的字符串
     * @throws Exception 异常
     */
    public static String toXML(Object obj, String rootName) throws Exception {
        String xml = "";
        if (null == obj){
            throw new Exception("object对象为空,无法转换!");
        }
        if (null == rootName || "".equals(rootName)){
            throw new Exception("根节点名称为空,无法转换!");
        }

        if (obj instanceof Collection){
            xml = arrayToXML(obj, rootName);
        }else {
            xml = objectToXML(obj,rootName);
        }
        return xml;
    }

    /**
     * 将对象转化成XML格式
     * @param obj 待转换对象
     * @return XML格式的字符串
     * @throws Exception 异常
     */
    private static String objectToXML(Object obj) throws Exception {
        StringBuilder xml = new StringBuilder();
        if (null == obj){
            throw new Exception("object对象为空,无法转换!");
        }
        Class objClass = obj.getClass();
        String name = objClass.getSimpleName().toUpperCase();
        Field[] fields = objClass.getDeclaredFields();
        xml.append("<").append(name).append(">");
        for (Field field : fields) {
            field.setAccessible(true);
            String fieldType = field.getType().getSimpleName().toUpperCase();
            if (!"STRING".equals(fieldType)){
                if (null == field.get(obj)){
                    xml.append("<").append(fieldType).append(">");
                    //xml.append("null");
                    xml.append("</").append(fieldType).append(">");
                    continue;
                }
                String s = objectToXML(field.get(obj));
                xml.append(s);
                continue;
            }
            String fieldName = field.getName().toUpperCase();
            xml.append("<").append(fieldName).append(">");
            Object fieldValue = field.get(obj);
            xml.append(fieldValue);
            xml.append("</").append(fieldName).append(">");
        }
        xml.append("</").append(name).append(">");
        return xml.toString();
    }

    /**
     * 将对象转化成XML格式
     * @param obj 待转换对象
     * @param rootName 根节点名称
     * @return XML格式的字符串
     * @throws Exception 异常
     */
    private static String objectToXML(Object obj,String rootName) throws Exception {
        StringBuilder xml = new StringBuilder();
        if (null == obj){
            throw new Exception("object对象为空,无法转换!");
        }
        Class objClass = obj.getClass();
        Field[] fields = objClass.getDeclaredFields();
        xml.append("<").append(rootName).append(">");
        for (Field field : fields) {
            field.setAccessible(true);
            String fieldType = field.getType().getSimpleName().toUpperCase();
            if (!"STRING".equals(fieldType)){
                if (null == field.get(obj)){
                    xml.append("<").append(fieldType).append(">");
                    //xml.append("null");
                    xml.append("</").append(fieldType).append(">");
                    continue;
                }
                String s = objectToXML(field.get(obj));
                xml.append(s);
                continue;
            }
            String fieldName = field.getName().toUpperCase();
            xml.append("<").append(fieldName).append(">");
            Object fieldValue = field.get(obj);
            xml.append(fieldValue);
            xml.append("</").append(fieldName).append(">");
        }
        xml.append("</").append(rootName).append(">");
        return xml.toString();
    }

    /**
     * 将对象转化成XML格式,不完善
     * @param obj 待转换对象
     * @throws Exception 异常
     */
    private static void objectToXML2(Object obj) throws Exception {
        if (null == obj){
            throw new Exception("该对象为空");
        }
        StringBuilder xml = new StringBuilder();
        LinkedList<Object> list = new LinkedList<>();
        Class<?> objClass = obj.getClass();
        String className = objClass.getSimpleName();
        xml.append("<").append(className).append(">");
        Field[] fields = objClass.getDeclaredFields();
        for (Field field : fields) {
            if ("String".equals(field.getType().getSimpleName())){
                field.setAccessible(true);
                String fieldName = field.getName();
                xml.append("<").append(fieldName).append(">");
                Object fieldValue = field.get(obj);

                if (null == fieldValue){
                    xml.append("</").append(fieldName).append(">");
                }else {
                    xml.append(fieldValue.toString());
                    xml.append("</").append(fieldName).append(">");
                }
            }else {
                String fieldName = field.getName();
                field.setAccessible(true);
                list.add(field.get(obj));
            }
        }

        Object objTemp;
        boolean isEnd = true;
        while (!list.isEmpty()){
            objTemp = list.removeFirst();
            if (null == objTemp){
                continue;
            }
            Class<?> objTempClass = objTemp.getClass();
            String simpleName = objTempClass.getSimpleName();
            xml.append("<").append(simpleName).append(">");
            Field[] fields2 = objTempClass.getDeclaredFields();
            for (Field field : fields2) {
                if ("String".equals(field.getType().getSimpleName())){
                    field.setAccessible(true);
                    String fieldName = field.getName();
                    xml.append("<").append(fieldName).append(">");
                    Object fieldValue = field.get(objTemp);
                    if (null == fieldValue){
                        xml.append("</").append(fieldName).append(">");
                    }else {
                        xml.append(fieldValue.toString());
                        xml.append("</").append(fieldName).append(">");
                    }
                }else {
                    String fieldName = field.getName();
                    xml.append("<").append(fieldName).append(">");
                    field.setAccessible(true);
                    list.add(field.get(objTemp));
                }
            }
            xml.append("</").append(simpleName).append(">");
        }
        xml.append("</").append(className).append(">");
        System.out.println(xml.toString());
    }

    /**
     * 将集合类型对象转化成XML格式
     * @param obj 待转化的集合类型对象
     * @return XML格式的字符串
     * @throws Exception 异常
     */
    private static String arrayToXML (Object obj) throws Exception {
        if (null == obj){
            throw new Exception("object对象为空,无法转换!");
        }

        if (!(obj instanceof Collection)){
            throw new Exception("object对象非集合类型,无法转换!");
        }

        StringBuilder xml = new StringBuilder();
        Class objClass = obj.getClass();
        String simpleName = objClass.getSimpleName().toUpperCase();
        xml.append("<").append(simpleName).append(">");
        if (obj instanceof List){
            List list = (List)obj;
            for (Object o : list) {
                String objectToXML = objectToXML(o);
                xml.append(objectToXML);
            }
        }
        xml.append("</").append(simpleName).append(">");

        return xml.toString();
    }

    /**
     * 将集合类型对象转化成XML格式
     * @param obj 待转化的集合类型对象
     * @param rootName 根节点名称
     * @return XML格式的字符串
     * @throws Exception 异常
     */
    private static String arrayToXML (Object obj, String rootName) throws Exception {
        if (null == obj){
            throw new Exception("object对象为空,无法转换!");
        }
        if (!(obj instanceof Collection)){
            throw new Exception("object对象非集合类型,无法转换!");
        }
        StringBuilder xml = new StringBuilder();
        xml.append("<").append(rootName).append(">");
        if (obj instanceof List){
            List list = (List)obj;
            for (Object o : list) {
                String objectToXML = objectToXML(o);
                xml.append(objectToXML);
            }
        }
        xml.append("</").append(rootName).append(">");
        return xml.toString();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值