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

📄 xmlformatter.java

📁 办公自动化项目
💻 JAVA
字号:
package hong.javanet.util;

import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import org.apache.commons.beanutils.*;
import java.beans.*;
import java.lang.reflect.*;
import java.util.*;
import java.io.IOException;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class XMLFormatter {
  public static Document serialize(Object obj, String root) {
    return serialize(obj, root, true);
  }
  public static Document serialize(Object obj, String root, boolean clazz) {
    return new Document(format(obj, root, clazz));
  }

  public static void serialize(Object obj, java.io.OutputStream os, String root,
                               boolean clazz) throws
      IOException {
    Document doc = new Document(format(obj, root, clazz));
    org.jdom.output.XMLOutputter out = new org.jdom.output.XMLOutputter();
    out.output(doc, os);
  }

  public static Object deSerialize(java.io.InputStream is, Class clazz) throws
      IOException, JDOMException, InvocationTargetException,
      NoSuchMethodException, InstantiationException, IllegalAccessException,
      ClassNotFoundException {
    SAXBuilder b = new SAXBuilder();
    Document doc = b.build(is);
    return parse(doc.getRootElement(), clazz);
  }

  private static Element format(Object obj, String name, boolean clazz) {
    Element element = new Element(name);
    if (obj == null) {
      return element;
    }
    if (obj instanceof String ||
        obj instanceof Integer || obj instanceof Byte ||
        obj instanceof Character || obj instanceof Long ||
        obj instanceof Boolean || obj instanceof Short ||
        obj instanceof Float || obj instanceof Double) {
      element.setText(obj.toString());
      return element;
    }
    if (obj instanceof java.util.Collection) {
      if (clazz) {
        element.setAttribute("class", obj.getClass().getName());
       //element.addAttribute("class", obj.getClass().getName());
      }
      Iterator iter = ( (java.util.Collection) obj).iterator();
      while (iter.hasNext()) {
        Object item = (Object) iter.next();
        element.addContent(format(item, "item", clazz));
      }
      return element;
    }

    java.beans.PropertyDescriptor pd[] = PropertyUtils.getPropertyDescriptors(
        obj);
    for (int i = 0; i < pd.length; i++) {
      if (pd[i].getReadMethod() != null && pd[i].getWriteMethod() != null) {
        try {
          Object value = PropertyUtils.getProperty(obj, pd[i].getName());
          element.addContent(format(value, pd[i].getName(), clazz));
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }
    }
    if (clazz) {
      element.setAttribute("class", obj.getClass().getName());
      //element.addAttribute("class", obj.getClass().getName());
    }
    return element;
  }

  private static Object parse(Element element, Class clazz) throws
      ClassNotFoundException, IllegalAccessException, InstantiationException,
      NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    String className = element.getAttributeValue("class");
    if (className != null) {
      clazz = Class.forName(className);
    }
    Object obj = null;
    if (clazz.equals(String.class) ||
        clazz.equals(int.class) || clazz.equals(Integer.class) ||
        clazz.equals(boolean.class) || clazz.equals(Boolean.class) ||
        clazz.equals(byte.class) || clazz.equals(Byte.class) ||
        clazz.equals(char.class) || clazz.equals(Character.class) ||
        clazz.equals(short.class) || clazz.equals(Short.class) ||
        clazz.equals(long.class) || clazz.equals(Long.class) ||
        clazz.equals(float.class) || clazz.equals(Float.class) ||
        clazz.equals(double.class) || clazz.equals(Double.class)) {
      obj = String.valueOf(element.getText());
      return obj;
    }
    obj = clazz.newInstance();
    if (obj instanceof java.util.Collection) {
      java.util.Collection collection = (java.util.Collection) obj;
      Iterator iter = element.getChildren().iterator();
      while (iter.hasNext()) {
        Element item = (Element) iter.next();
        collection.add(parse(item, String.class));
      }
      return collection;
    }

    Iterator iter = element.getChildren().iterator();
    while (iter.hasNext()) {
      Element item = (Element) iter.next();
      Class propertyClass = PropertyUtils.getPropertyType(obj, item.getName());
      Object o = parse(item, propertyClass);
      BeanUtils.setProperty(obj, item.getName(), o);
    }
    return obj;
  }

}

⌨️ 快捷键说明

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