• dom4j生成、解析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;
    }

  • 相关阅读:
    高性能异步爬虫
    线程池在爬虫案例中的应用
    线程池的基本使用
    requests代理爬取
    python验证码识别
    获取人人网当前用户的个人详情页数据
    模拟登录人人网
    移远BC26基础开发之程序结构 三
    移远BC26基础开发之配置 二
    移远BC26/BC28(略)/MC20开发之环境搭建 一
  • 原文地址:https://www.cnblogs.com/fx2008/p/4225452.html
Copyright © 2020-2023  润新知