TOP

簡單實體類和xml文件的相互轉換(一)
2017-10-12 18:09:09 】 瀏覽:10830
Tags:

最近寫一個題目,要求將一組員工實體類轉換成xml文件,或將xml文件轉換成一組實體類。題目不難,但寫完感覺可以利用泛型和反射將任意一個實體類和xml文件進行轉換。于是今天下午立馬動手

試了下优乐棋牌app下载,做了個簡單的模型,可以將簡單的實體類和xml文件進行相互轉換,但對實體類的屬性類型有限制,目前只支持String, Integer, Double三種類型。但是后面可以擴展。

我的大概思路是這樣的,只要能拿到實體類的類型信息优乐棋牌app下载,我就能拿到實體類的全部字段名稱和類型,拼屬性的set和get方法更是簡單明了,這時候只需要通過方法的反射,將xml文件的數據讀取出來給這個反射即可。

反過來只要給我一個任意對象,我就能通過反射拿到該對象所有字段的值优乐棋牌app下载,這時候在寫xml文件即可。

具體代碼如下:

package com.pcq.entity;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XMLAndEntityUtil {
    private static Document document = DocumentHelper.createDocument();
    
    @SuppressWarnings("unused")
    private static boolean isXMLFile(String filePath) {
        File file = new File(filePath);
        if(!file.exists() || filePath.indexOf(".xml") > -1) {
            return false;
        }
        return true;
    }
    
    public static <T> void writeXML(List<T> list, String filePath) {
        Class<?> c = list.get(0).getClass();
        String root = c.getSimpleName().toLowerCase() + "s";
        Element rootEle = document.addElement(root);
        for(Object obj : list) {
            try {
                Element e = writeXml(rootEle, obj);
                document.setRootElement(e);
                writeXml(document, filePath);
            } catch (NoSuchMethodException | SecurityException
                    | IllegalAccessException | IllegalArgumentException
                    | InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
    
    private static Element writeXml(Element root, Object object) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        Class<?> c = object.getClass();
        String className = c.getSimpleName().toLowerCase();
        Element ele = root.addElement(className);
        Field[] fields = c.getDeclaredFields();
        for(Field f : fields) {
            String fieldName = f.getName();
            String param = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
            Element fieldElement = ele.addElement(fieldName);
            Method m = c.getMethod("get" + param, null);
            String s = "";
            if(m.invoke(object, null) != null) {
                s = m.invoke(object, null).toString();
            }
            fieldElement.setText(s);
        }
        return root;
    }
    
    public static <T> List<T> getEntitys(Class<T> c, String filePath) throws UnsupportedEncodingException, FileNotFoundException {
        return getEntitys(c, filePath, "utf-8");
    }
    /**
     * 將一個xml文件轉變成實體類
     * @param c
     * @param filePath
     * @return
     * @thr  
		

請關注公眾號獲取更多資料



首頁 上一頁 1 2 3 下一頁 尾頁 1/3/3
】【打印繁體】【】【】 【】【】【】 【關閉】 【返回頂部
上一篇SpringMVC---進階篇 下一篇關于Date 時區問題鬧得一個小笑話