dom4j生成、解析xml_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > dom4j生成、解析xml

dom4j生成、解析xml

 2011/12/23 9:32:15  jiangnan2112  http://jiangnan2112.iteye.com  我要评论(0)
  • 摘要:/***创建xml*@paramobj泛型对象*@paramentityPropertys泛型对象的List集合*@paramEncodeXML自定义编码类型*@paramXMLPathXML文件的路径及文件名*@date2011-5-8*@authorlujan*/publicvoidcreateXmlDocument(Tobj,List<T>entityPropertys,StringEncode,StringXMLPath){try{XMLWriterwriter=null
  • 标签:XML 解析
	/**  
     * 创建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;   
    }      
    
发表评论
用户名: 匿名