⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlutils.java

📁 XML配置文件读取的工具类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package dev.trade.common.xml;

import java.io.*;
import java.lang.reflect.*;
import java.net.*;
import java.util.*;
import org.apache.log4j.*;
import org.dom4j.*;
import org.dom4j.io.*;

/**
 * <p>Title: XML工具</p>
 *
 * <p>Description: XML处理工具类</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: Newland</p>
 *
 * @author ZhengYanNan
 * @version 1.0
 */
public class XMLUtils {
  private static Logger log = Logger.getLogger(XMLUtils.class);

  public static final String XML_HEAD_GBK = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
  public static final String XML_HEAD_GB2312 = "<?xml version=\"1.0\" encoding=\"GB2312\"?>";
  public static final String XML_HEAD_UTF8 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";

  public static final String ATTR_CLASS = "_Class";          //标识JAVA类的属性名称
  public static final String ATTR_PARAM_TYPE = "_ParamType"; //标识参数的JAVA类型
  public static final String ATTR_TYPE = "_AttrType";        //标识类型的属性名称
  public static final String ATTR_LIST_TAG = "_AttrLTag";    //标识List中各项所属用的Tag的属性名称
  public static final String TYPE_MAP = "map";               //类型 Map
  public static final String TYPE_LIST = "list";             //类型 List
  public static final String TYPE_PAIRLIST = "pairList";     //类型 PairList
  public static final String DEF_LIST_TAG = "li";            //默认 List 的各项的Tag

  public XMLUtils() {
  }

  /**
   * 创建一个新的Document
   * @return Document
   */
  public static Document buildDocument(){
    return DocumentHelper.createDocument();
  }

  /**
   * 从XML字符串构建 dom4j document 对象
   * @param xmlString String  XML字符串
   * @return Document
   */
  public static Document buildDocFromXML(String xmlString){
    try{
      return DocumentHelper.parseText(xmlString);
    } catch(DocumentException ex){
      log.error("无法从XML字串构建dom4j Document:" + xmlString, ex);
      return null;
    }
  }

  /**
   * 从文件构建dom4j document 对象
   * @param fileName String   文件名(包含路径)
   * @return Document
   */
  public static Document buildDocFromFile(String fileName){
    try{
      SAXReader sb = new SAXReader();
      return sb.read(new File(fileName));
    }catch(Exception ex){
      log.error("无法从文件["+fileName+"]构建dom4j document", ex);
      return null;
    }
  }

  /**
   * 从输入流构建dom4j document对象
   * @param in InputStream
   * @return Document
   */
  public static Document buildDocFromInputStream(InputStream in){
    try{
      SAXReader sb = new SAXReader();
      return sb.read(in);
    } catch(Exception ex){
      log.error("无法从输入流构建dom4j document", ex);
      return null;
    }
  }

  /**
   * 从Reader流构建dom4j document对象
   * @param rd Reader
   * @return Document
   */
  public static Document buildDocFromReader(Reader rd){
    try{
      SAXReader sb = new SAXReader();
      return sb.read(rd);
    } catch(Exception ex){
      log.error("无法从Reader构建dom4j document", ex);
      return null;
    }
  }

  /**
   * 从URL流构建dom4j document对象
   * @param url URL
   * @return Document
   */
  public static Document buildDocFromURL(URL url){
    try{
      SAXReader sb = new SAXReader();
      return sb.read(url);
    } catch(Exception ex){
      log.error("无法从URL["+ url +"]构建dom4j document", ex);
      return null;
    }
  }

  /**
   * 构建由bean的所有get方法组织的结点,生成如下形式的xml:
   * <node><name><get1>val1</get1><get2>val2</get2></name></node>
   * @deprecated
   * @param node Element  父结果
   * @param name String   结点名称
   * @param obj Object    bean对象
   */
  public static void addChildByBean(Element node, String name, Object obj){
    if(node == null || obj == null)
      return;
    Element pe = node.addElement(name);
    Class clazz = obj.getClass();
    pe.addAttribute(ATTR_CLASS, clazz.getName());
    Method[] methods = clazz.getDeclaredMethods();
    Element e = null;
    Method md = null;
    String mname = null, aname = null, val = null;
    int iAttr = 0;
    for(int i = 0, l = methods.length; i < l; i++){
      md = methods[i];
      mname = md.getName();
      clazz = md.getReturnType();
      if(mname.startsWith("get") && md.getParameterTypes().length == 0 && !clazz.equals(Void.TYPE)){
        try{
          val = md.invoke(obj, null).toString();
          aname = mname.substring(3);
          e = pe.addElement(aname);
          e.addAttribute(ATTR_PARAM_TYPE, clazz.getName());
          e.setText(val);
          iAttr ++;
        } catch(Exception ex){
        }
      }
    }
    if(iAttr==0)
      pe.setText(obj.toString());
  }


  /**
  * 将List中的PairEntry对象插入Node中作为其子节点,形如:
  * <Node><list[i].name>list[i].text</list[i].name></Node>
  * @param node Element
  * @param list PairList
  */
  public static void addChildByPairList(Element node, PairList list){
    if(node == null || list == null || list.size() == 0)
      return;
    Element e = null;
    PairEntry pair = null;
    String name = null;
    for(int i = 0, l = list.size(); i < l; i++){
      pair = list.get(i);
      name = pair.name;
      if(pair.name != null){
        name = pair.name.trim();
        if(name.length() > 0){
          e = node.addElement(pair.name);
          if(pair.value != null)
            e.setText(pair.value);
        }
      }
    }
  }

  public static void addChildByList(Element node, String name, List list){
    addChildByList(node, name, list, true);
  }

  /**
   * 将List中元素添加到Node中作为其子节点,形如:
   * <Node><name>value1</name><name>value2</name></Node>
   * @param node Element   父节点
   * @param name String    子节点的名称
   * @param list List      子节点的值列表
   * @param bReloadable boolean     是否可重载入(可重载入的XML会添加额外标记)
   */
  public static void addChildByList(Element node, String name, List list, boolean bReloadable){
    if(node == null || list == null || list.size() == 0)
      return;
    if(bReloadable){
      node.addAttribute(ATTR_TYPE, TYPE_LIST);
      node.addAttribute(ATTR_LIST_TAG, name);
    }
    Element e = null;
    Object obj = null;
    for(int i = 0, l = list.size(); i < l; i++){
      e = node.addElement(name);
      obj = list.get(i);
      if(obj instanceof Map){
        addChildByMap(e,(Map)obj, bReloadable);
      } else if(obj instanceof List){
        addChildByList(e, DEF_LIST_TAG, (List)obj, bReloadable);
      } else if(obj instanceof PairList){
        addChildByPairList(e, (PairList)obj);
      } else if(obj != null){
        e.setText(obj.toString());
      }
    }
  }

  public static void addChildByMap(Element node, Map map){
    addChildByMap(node, map, true);
  }

  /**
   * 将Map中的元素添加到Node中作为其子节点, 形如:
   * <Node><key1>value1</key><key2>value2</key2>...</Node>
   * @param node Element   父节点
   * @param map Map        子节点的名值对
   * @param bReloadable boolean     是否可重载入(可重载入的XML会添加额外标记)
   */
  public static void addChildByMap(Element node, Map map, boolean bReloadable){
    if(node==null || map==null || map.isEmpty())
      return;
    if(bReloadable)
      node.addAttribute(ATTR_TYPE,TYPE_MAP);
    Element e = null;
    Object obj = null;
    String name = null;
    Map.Entry et = null;
    Iterator it = map.entrySet().iterator();
    while(it.hasNext()){
      et = ((Map.Entry)it.next());
      name = et.getKey().toString();
      e = node.addElement(name);
      obj = et.getValue();
      if(obj instanceof Map){
        addChildByMap(e, (Map)obj, bReloadable);
      } else if(obj instanceof List){
        addChildByList(e, DEF_LIST_TAG, (List)obj, bReloadable);
      } else if(obj instanceof PairList){
        addChildByPairList(e, (PairList)obj);
      } else if(obj != null){
        e.setText(obj.toString());
      }
    }
  }

  /**
   * 获取指定节点下所有子节点的名字列表
   * @param node Element
   * @return List
   */
  public static List getChildNodeNameList(Element node){
    if(node==null)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -