/** * 创建xml * @param obj 泛型对象 * @param entityPropertys 泛型对象的List集合 * @param Encode XML自定义编码类型 * @param XMLPath XML文件的路径及文件名 * @date 2011-5-8 * @author lujan */ public void createXmlDocument(T obj, List<T> entityPropertys, String Encode, String XMLPath) { try { XMLWriter writer = null;// 声明写XML的对象 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding(Encode); // 设置XML文件的编码格式 UTF-8 File file = new File(XMLPath);//获得文件 if (file.exists()) { file.delete(); } // 创建xml文件 Document document = DocumentHelper.createDocument(); String rootname = obj.getClass().getSimpleName(); //获得简单类名 Element root = document.addElement(rootname + "s");//添加根节点 Field[] properties = obj.getClass().getDeclaredFields();//获得实体类的所有属性 //赋值 for (T t : entityPropertys) { //递归实体 Element element = root.addElement(rootname); //二级节点 for (int i = 0; i < properties.length; i++) { //反射get方法 Method meth = t.getClass().getMethod("get"+ properties[i].getName().substring(0, 1).toUpperCase() + properties[i].getName().substring(1)); //为二级节点添加属性,属性值为对应属性的值 element.addElement(properties[i].getName()).setText(meth.invoke(t).toString()); } } writer = new XMLWriter(new FileOutputStream(file), format); writer.write(document); writer.close(); } catch (Exception e) { System.out.println("XML文件写入失败"); e.printStackTrace(); } }
/** * 解析 * @param XMLPath XML文件的路径(含名字) * @param t 泛型对象 * @return List<T> * @date 2011-5-8 * @author lujn */ public List<T> parserXml(String XMLPath, T t) { List<T> list = new ArrayList<T>(); //创建list集合 try { File f = new File(XMLPath); //读取文件 SAXReader reader = new SAXReader(); Document doc = reader.read(f); //dom4j读取 Element root = doc.getRootElement();//获得根节点 Element secondElement; //二级节点 Field[] properties = t.getClass().getDeclaredFields();//获得实例的属性 Method setMethod = null; for (Iterator i = root.elementIterator(t.getClass().getSimpleName()); i.hasNext();) { //遍历t.getClass().getSimpleName()节点 secondElement = (Element) i.next(); //下一个二级节点 t = (T)t.getClass().newInstance(); //获得对象的新的实例 Object[] args = new Object[properties.length]; for (int j = 0; j < properties.length; j++) { //遍历所有孙子节点 //实例的set方法 setMethod = t.getClass().getMethod("set"+ properties[j].getName().substring(0, 1).toUpperCase()+ properties[j].getName().substring(1),properties[j].getType()); setMethod.invoke(t,secondElement.elementText(properties[j].getName())) ; } list.add(t); } } catch (Exception e) { e.printStackTrace(); } return list; }