亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

簡單實體類和xml文件的相互轉換方法

2024-09-01 08:27:04
字體:
來源:轉載
供稿:網友

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

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

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

反過來只要給我一個任意對象,我就能通過反射拿到該對象所有字段的值,這時候在寫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();  /**  * 判斷是否是個xml文件,目前類里尚未使用該方法  * @param filePath   * @return  */ @SuppressWarnings("unused") private static boolean isXMLFile(String filePath) {  File file = new File(filePath);  if(!file.exists() || filePath.indexOf(".xml") > -1) {   return false;  }  return true; }  /**  * 將一組對象數據轉換成XML文件  * @param list  * @param filePath 存放的文件路徑  */ 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();   }  } } /**  * 通過一個根節點來寫對象的xml節點,這個方法不對外開放,主要給writeXML(List<T> list, String filePath)提供服務  * @param root  * @param object  * @return  * @throws NoSuchMethodException  * @throws SecurityException  * @throws IllegalAccessException  * @throws IllegalArgumentException  * @throws InvocationTargetException  */ 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; }  /**  * 默認使用utf-8  * @param c  * @param filePath  * @return  * @throws UnsupportedEncodingException  * @throws FileNotFoundException  */ 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  * @throws FileNotFoundException   * @throws UnsupportedEncodingException   */ public static <T> List<T> getEntitys(Class<T> c, String filePath, String encoding) throws UnsupportedEncodingException, FileNotFoundException {  File file = new File(filePath);  String labelName = c.getSimpleName().toLowerCase();  SAXReader reader = new SAXReader();  List<T> list = null;   try {   InputStreamReader in = new InputStreamReader(new FileInputStream(file), encoding);   Document document = reader.read(in);   Element root = document.getRootElement();   List elements = root.elements(labelName);   list = new ArrayList<T>();   for(Iterator<Emp> it = elements.iterator(); it.hasNext();) {     Element e = (Element)it.next();     T t = getEntity(c, e);     list.add(t);    }  } catch (DocumentException e) {   e.printStackTrace();  } catch (InstantiationException e1) {   e1.printStackTrace();  } catch (IllegalAccessException e1) {   e1.printStackTrace();  } catch (NoSuchMethodException e1) {   e1.printStackTrace();  } catch (SecurityException e1) {   e1.printStackTrace();  } catch (IllegalArgumentException e1) {   e1.printStackTrace();  } catch (InvocationTargetException e1) {   e1.printStackTrace();  }  return list; }   /**  * 將一種類型 和對應的 xml元素節點傳進來,返回該類型的對象,該方法不對外開放  * @param c 類類型  * @param ele 元素節點  * @return 該類型的對象  * @throws InstantiationException  * @throws IllegalAccessException  * @throws NoSuchMethodException  * @throws SecurityException  * @throws IllegalArgumentException  * @throws InvocationTargetException  */ @SuppressWarnings("unchecked") private static <T> T getEntity(Class<T> c, Element ele) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {  Field[] fields = c.getDeclaredFields();  Object object = c.newInstance();//  for(Field f : fields) {   String type = f.getType().toString();//獲得字段的類型   String fieldName = f.getName();//獲得字段名稱   String param = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);//把字段的第一個字母變成大寫   Element e = ele.element(fieldName);   if(type.indexOf("Integer") > -1) {//說明該字段是Integer類型    Integer i = null;    if(e.getTextTrim() != null && !e.getTextTrim().equals("")) {     i = Integer.parseInt(e.getTextTrim());    }    Method m = c.getMethod("set" + param, Integer.class);    m.invoke(object, i);//通過反射給該字段set值   }   if(type.indexOf("Double") > -1) { //說明該字段是Double類型    Double d = null;    if(e.getTextTrim() != null && !e.getTextTrim().equals("")) {     d = Double.parseDouble(e.getTextTrim());    }    Method m = c.getMethod("set" + param, Double.class);    m.invoke(object, d);   }   if(type.indexOf("String") > -1) {//說明該字段是String類型    String s = null;    if(e.getTextTrim() != null && !e.getTextTrim().equals("")) {     s = e.getTextTrim();    }    Method m = c.getMethod("set" + param, String.class);    m.invoke(object, s);   }  }  return (T)object; } /**  * 用來寫xml文件  * @param doc Document對象  * @param filePath 生成的文件路徑  * @param encoding 寫xml文件的編碼  */ public static void writeXml(Document doc, String filePath, String encoding) {  XMLWriter writer = null;  OutputFormat format = OutputFormat.createPrettyPrint();  format.setEncoding(encoding);// 指定XML編碼    try {   writer = new XMLWriter(new FileWriter(filePath), format);   writer.write(doc);  } catch (IOException e) {   e.printStackTrace();  } finally {   try {    writer.close();   } catch (IOException e) {    e.printStackTrace();   }  } }  /**  * 默認使用utf-8的格式寫文件  * @param doc  * @param filePath  */ public static void writeXml(Document doc, String filePath) {  writeXml(doc, filePath, "utf-8"); }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美一区二区三区久久| 国产精品视频在线播放| 青青草原成人在线视频| 国内精品模特av私拍在线观看| 国产成人精品一区二区在线| 久久免费少妇高潮久久精品99| 久久久亚洲国产| 国产精品黄页免费高清在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美成人精品一区| 欧美午夜美女看片| 亚洲国产成人精品一区二区| 亚洲爱爱爱爱爱| 久久久人成影片一区二区三区观看| 青青草成人在线| 亚洲天堂成人在线视频| 欧美激情视频给我| 久久激情视频久久| 欧美精品一本久久男人的天堂| 亚洲影院在线看| 亚洲精品www| 亚洲欧美综合另类中字| 成人免费直播live| 色樱桃影院亚洲精品影院| 国产欧美日韩专区发布| 国产精品偷伦免费视频观看的| 国产精品人成电影在线观看| 精品亚洲一区二区三区四区五区| 国产日产久久高清欧美一区| 日韩av三级在线观看| 久99久在线视频| 高清日韩电视剧大全免费播放在线观看| 国模精品视频一区二区三区| 性欧美办公室18xxxxhd| 精品日本高清在线播放| 精品呦交小u女在线| 欧美黄色片免费观看| 欧美极品少妇xxxxⅹ裸体艺术| 日韩精品在线第一页| 色播久久人人爽人人爽人人片视av| 欧美大秀在线观看| 国产伊人精品在线| 国产精品一区二区三区成人| 欧美一区二区三区免费观看| 一区二区三区无码高清视频| 亚洲激情在线视频| 日韩国产高清污视频在线观看| 中文字幕日韩免费视频| 久久精品视频导航| 欧美在线视频一区| 亚洲最大av在线| 在线看日韩av| 亚洲精品久久久一区二区三区| 日韩精品在线免费观看| 成人免费观看网址| 日韩免费观看av| 欧美亚洲国产视频| 91精品久久久久久久久久另类| 热久久免费国产视频| 性夜试看影院91社区| 国产精品男人爽免费视频1| 国产最新精品视频| 91精品国产高清自在线看超| 国产精品国模在线| 在线观看视频亚洲| 91高潮精品免费porn| 精品久久久久久电影| 伊人久久免费视频| 最近2019中文字幕在线高清| 久久97精品久久久久久久不卡| 欧美在线观看www| 成人啪啪免费看| 日韩精品中文字幕在线观看| 日韩免费观看av| 久久久久国产精品一区| 久久久久久网址| 欧美日韩国产精品一区| 久久久久久成人精品| 久久久精品电影| 日韩成人av在线| 亚洲欧美综合图区| 日韩成人中文字幕| 亚洲图片在线综合| 欧美电影电视剧在线观看| 中文字幕av日韩| 国产丝袜精品第一页| 久久久精品一区| 成人亚洲欧美一区二区三区| 在线观看国产欧美| 国产精品久久久久免费a∨| 国产91成人在在线播放| 国内成人精品视频| 欧美久久精品一级黑人c片| 日韩精品视频中文在线观看| 午夜精品视频网站| 亚洲免费电影一区| 久久久人成影片一区二区三区观看| 4438全国亚洲精品在线观看视频| 亚洲欧美中文字幕| 亚洲精品456在线播放狼人| 久久久久久久久久久久av| 精品国偷自产在线| 国产精品99久久久久久白浆小说| 欧美性videos高清精品| 亚洲一区二区久久久久久久| 国产视频精品自拍| 亚洲片在线观看| 成人激情综合网| 高清欧美性猛交xxxx黑人猛交| 国产精品第一第二| 日本视频久久久| 国产精品无av码在线观看| 久久久久久高潮国产精品视| 亚洲综合色激情五月| 日产日韩在线亚洲欧美| 亚州av一区二区| 91精品久久久久久久久久久久久久| 成人两性免费视频| 欧美日韩国产va另类| 黑人巨大精品欧美一区二区三区| 欧美日韩国产影院| 日韩毛片中文字幕| 久久久久久久久久久人体| 性欧美激情精品| 亚洲精品白浆高清久久久久久| 91久久精品国产91久久性色| 久久久精品在线| 国产一区av在线| 91精品久久久久久久久久久久久| 亚洲韩国青草视频| 国产欧美欧洲在线观看| 97人人模人人爽人人喊中文字| 秋霞成人午夜鲁丝一区二区三区| 热99精品只有里视频精品| 欧美国产日韩一区二区三区| 国产视频精品免费播放| 欧美日韩免费在线观看| 亚洲视频国产视频| 欧美成人午夜剧场免费观看| 国产精品96久久久久久又黄又硬| 欧美裸体xxxx极品少妇软件| 亚洲免费成人av电影| 欧美日韩国产激情| 亚洲精品一区二区在线| 亚洲精品成人久久| 91香蕉电影院| 亚洲一区二区三区久久| 国产精品视频免费观看www| 亚洲精品影视在线观看| 亚洲最新av在线| 久久免费视频在线观看| 在线观看久久av| 国产在线精品一区免费香蕉| 96精品久久久久中文字幕| 亚洲福利视频在线| 韩国精品久久久999| 国产精品爱久久久久久久| 欧美电影免费播放| 在线视频欧美日韩精品| 亚洲精品之草原avav久久| 亚洲女人天堂网| 国产91热爆ts人妖在线| 91亚洲精品在线观看| 亚洲春色另类小说|