📄 xmlformatter.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 + -