Java代码 复制代码 收藏代码
  1. /**    
  2.     * 创建xml    
  3.     * @param obj        泛型对象    
  4.     * @param entityPropertys 泛型对象的List集合    
  5.     * @param Encode     XML自定义编码类型   
  6.     * @param XMLPath    XML文件的路径及文件名    
  7.     * @date 2011-5-8  
  8.     * @author lujan  
  9.     */     
  10.    public void createXmlDocument(T obj, List<T> entityPropertys, String Encode,      
  11.            String XMLPath) {      
  12.        try {      
  13.            XMLWriter writer = null;// 声明写XML的对象       
  14.            OutputFormat format = OutputFormat.createPrettyPrint();      
  15.            format.setEncoding(Encode);  // 设置XML文件的编码格式 UTF-8     
  16.   
  17.            File file = new File(XMLPath);//获得文件        
  18.     
  19.            if (file.exists()) {      
  20.                file.delete();      
  21.            }      
  22.            // 创建xml文件     
  23.            Document document = DocumentHelper.createDocument();      
  24.            String rootname = obj.getClass().getSimpleName();  //获得简单类名      
  25.            Element root = document.addElement(rootname + "s");//添加根节点      
  26.            Field[] properties = obj.getClass().getDeclaredFields();//获得实体类的所有属性      
  27.            //赋值   
  28.            for (T  t : entityPropertys) {                                //递归实体      
  29.                Element element = root.addElement(rootname);            //二级节点      
  30.                for (int i = 0; i < properties.length; i++) {                         
  31.                    //反射get方法          
  32.                    Method meth = t.getClass().getMethod("get"+ properties[i].getName().substring(01).toUpperCase() + properties[i].getName().substring(1));      
  33.                    //为二级节点添加属性,属性值为对应属性的值      
  34.                    element.addElement(properties[i].getName()).setText(meth.invoke(t).toString());      
  35.                }      
  36.            }      
  37.            writer = new XMLWriter(new FileOutputStream(file), format);   
  38.            writer.write(document);      
  39.            writer.close();      
  40.        } catch (Exception e) {      
  41.            System.out.println("XML文件写入失败");    
  42.            e.printStackTrace();   
  43.        }      
  44.    }    
 
Java代码 复制代码 收藏代码
  1. /**    
  2.   *   解析  
  3.   * @param XMLPath XML文件的路径(含名字)  
  4.   * @param t     泛型对象    
  5.   * @return  List<T>  
  6.   * @date 2011-5-8  
  7.   * @author lujn  
  8.   */       
  9.  public List<T> parserXml(String XMLPath, T t) {      
  10.      List<T> list = new ArrayList<T>();   //创建list集合      
  11.      try {      
  12.          File f = new File(XMLPath);    //读取文件             
  13.          SAXReader reader = new SAXReader();     
  14.          Document doc = reader.read(f);     //dom4j读取     
  15.          Element root = doc.getRootElement();//获得根节点      
  16.          Element secondElement;             //二级节点      
  17.          Field[] properties = t.getClass().getDeclaredFields();//获得实例的属性        
  18.   
  19.          Method setMethod = null;      
  20.          for (Iterator i = root.elementIterator(t.getClass().getSimpleName()); i.hasNext();) {   
  21.             //遍历t.getClass().getSimpleName()节点      
  22.             secondElement = (Element) i.next();         //下一个二级节点      
  23.             t = (T)t.getClass().newInstance();          //获得对象的新的实例      
  24.             Object[] args = new Object[properties.length];   
  25.             for (int j = 0; j < properties.length; j++) {   
  26.                //遍历所有孙子节点      
  27.                 //实例的set方法      
  28.                setMethod = t.getClass().getMethod("set"+ properties[j].getName().substring(01).toUpperCase()+ properties[j].getName().substring(1),properties[j].getType());   
  29.                setMethod.invoke(t,secondElement.elementText(properties[j].getName())) ;   
  30.              }      
  31.              list.add(t);      
  32.          }                
  33.      } catch (Exception e) {      
  34.          e.printStackTrace();      
  35.      }      
  36.      return list;      
  37.  }         
  38.    
posted on 2011-12-23 09:51  John Liang  阅读(503)  评论(0编辑  收藏  举报