- /**
- * 创建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;
- }