用dom4j将java对象解析为xml

package com.winning.batsvi.core.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.tree.BaseElement;
import org.dom4j.tree.DefaultDocument;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 
 * 处理xml工具类
 */
@Slf4j
public class HzzxXmlUtil {
    public static final String[] FIX_ELEMENT = new String[]{
            "BUSINESS_ID"
            , "ORGANIZATION_CODE"
            , "UPDATE_DATE"
            , "DATAGENERATE_DATE"
            , "ORGANIZATION_NAME"
            , "BASIC_ACTIVE_ID"
            , "RECORD_IDEN"
            , "DOMAIN_CODE"
            , "SERIALNUM_ID"
            , "ARCHIVE_DATE"
            , "CREATE_DATE"
            , "BATCH_NUM"
            , "LOCAL_ID"
            , "TASK_ID"};


    /**
     * 对象数组转化为xml(rootElement为root)对象
     *
     * @param enterList 对象数组
     * @param listName  数组对应标签名
     * @param flag 是否添加固定内容
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T> Document parserMultiple(List<T> enterList, String listName, boolean flag) throws Exception {
        if (CollectionUtils.isEmpty(enterList)) {
            return null;
        }
        List<Element> fixElements = null;
        if (flag) {
            //固定的Element
             fixElements = new ArrayList<>();
            for (String s : FIX_ELEMENT) {
                fixElements.add(new BaseElement(s));
            }
        }
        Class<?> aClass = enterList.get(0).getClass();
        Field[] declaredFields = aClass.getDeclaredFields();
        List<List<Element>> elementLists = new ArrayList<>();

        // 对象属性 转化为 Element,存放list中
        for (Object enter : enterList) {
            List<Element> elementList = new ArrayList<>();
            if (fixElements != null){
                elementList.addAll(fixElements);
            }
            for (Field field : declaredFields) {
                field.setAccessible(true);
                String name = field.getName();
                Element element = new BaseElement(name);
                if (field.get(enter) != null) {
                    String text = field.get(enter).toString();
                    element.setText(text);
                }
                elementList.add(element);
            }
            elementLists.add(elementList);
        }

        Document document = new DefaultDocument(new BaseElement("root"));
        Element rootElement = document.getRootElement();
        for (List<Element> elementList : elementLists) {
            Element element = rootElement.addElement(listName);
            for (Element element1 : elementList) {
                element.add((Element) element1.clone());
            }
        }
        return document;
    }

    /**
     * 输出优美格式xml日志
     *
     * @param document
     * @return
     * @throws IOException
     */
    public static void printPrettyLog(Document document) {
        try {
            OutputFormat format = new OutputFormat();
            format.setIndentSize(2); // 缩进空格个数
            format.setNewlines(true); // 新行
            format.setTrimText(true); // 修剪文字
            format.setPadText(true); // 文字填充
            format.setEncoding("UTF-8");

            StringWriter writer = new StringWriter();
            XMLWriter xmlWriter = new XMLWriter(writer, format);
            xmlWriter.write(document);
            xmlWriter.flush();
            log.info("生成的的xml信息为,{}", writer);
        } catch (Exception e) {
            log.info(e.getMessage());
        }

    }

    /**
     * xml对象转成String(紧凑格式)
     *
     * @param document
     * @return
     * @throws IOException
     */
    public static String createCompactFormat(Document document) {
        try {
            OutputFormat format = new OutputFormat();
            format.setIndent(false); // 缩排
            format.setNewlines(false); // 新行
            format.setTrimText(true); // 修剪文字
            format.setEncoding("UTF-8");

            StringWriter writer = new StringWriter();
            XMLWriter xmlWriter = new XMLWriter(writer, format);
            xmlWriter.write(document);
            xmlWriter.flush();
            return writer.toString();

        } catch (Exception e) {
            log.error("xml紧凑格式转化失败,{}", e);
        }
        return document.asXML();
    }

    /**
     * String转xml根节点对象
     *
     * @param returnXmlString
     * @return
     */
    public static Document getXmlElement(String returnXmlString) throws Exception {
        Document document = null;
        SAXReader reader = new SAXReader();
        try (InputStream is = new ByteArrayInputStream(returnXmlString.getBytes("utf8"))) {
            // 命令阅读器从输入流中读取文档对象
            document = reader.read(is);
            return document;
        }
    }

    /**
     * 读取resources下的xml文件
     *
     * @param resourcesPath
     * @return
     */
    public static Document getXmlDocument(String resourcesPath) {
        log.info("开始加载xml资源,xml路径{}", resourcesPath);
        InputStream in = HzzxServiceImpl.class.getClassLoader().getResourceAsStream(resourcesPath);
        // 使用dom4j读取xml
        SAXReader saxReader = new SAXReader();
        Document document = null;
        try {
            document = saxReader.read(in);
        } catch (DocumentException e) {
            log.error("加载xml资源失败,xml路径{}", resourcesPath);
        }
        return document;
    }
}

注意:

element.add((Element) element1.clone());//每个element对象只能添加一次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值