您的位置:首页 > 编程语言 > Java开发

今天根据别人的代码简单的封装了一个将java bean生成xml的一个工具类,运用了反射和泛型,重用性高。

2014-05-21 23:27 786 查看
package com.example.dbutil.utils;

import java.io.StringWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class XMLUtil {

/**
* 通过java bean集合 生成document
* @param list 存放java bean的集合
* @param cls
* @return
*/
public static <T> Document getDocument(List<T> list, Class<T> cls) {
Document doc = null;
Element root  = null;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = docFactory.newDocumentBuilder();
doc = builder.newDocument();
root = doc.createElement(cls.getSimpleName() + "s");
doc.appendChild(root);
Field[] fields = cls.getDeclaredFields();
for (T t : list){
Element element = doc.createElement(cls.getSimpleName());
for(Field f : fields){
String fieldName = f.getName();
//通过反射将java bean的get方法提取出来,获得java bean字段的值
Method method =
t.getClass().getMethod("get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1));
//通过get方法,获得java bean字段的值
String content = method.invoke(t).toString();
Element e = doc.createElement(fieldName);
e.setTextContent(content);
element.appendChild(e);
}
root.appendChild(element);
}
return doc;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

/**
* 将一个java bean对象生成document
* @param t java bean 对象
* @param cls java bean 类
* @return
*/
public static <T> Document getDocument(T t, Class<T> cls) {
Document doc = null;
Element root  = null;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = docFactory.newDocumentBuilder();
doc = builder.newDocument();
root = doc.createElement(cls.getSimpleName());
doc.appendChild(root);
Field[] fields = cls.getDeclaredFields();
for(Field f : fields){
String fieldName = f.getName();
Method method =
t.getClass().getMethod("get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1));
String content = method.invoke(t).toString();
Element e = doc.createElement(fieldName);
e.setTextContent(content);
root.appendChild(e);
}
return doc;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

/**
* 将docment转换为字符串
* @return
*/
public static String getXmlString(Document doc){
TransformerFactory tFactory = TransformerFactory.newInstance();
try {
StringWriter writer = new StringWriter();
Transformer tForm = tFactory.newTransformer();
tForm.transform(new DOMSource(doc), new StreamResult(writer));
return writer.toString();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
return null;
} catch (TransformerException e) {
e.printStackTrace();
return null;
}
}
/**
* 将java bean的集合生成xml 并以字符串的格式返回
* @param list
* @param cls
* @return
*/
public static <T> String getXmlByBeanList(List<T> list, Class<T> cls){
return getXmlString(getDocument(list, cls));
}

/**
* 将一个java bean生成xml并以字符串形式返回
* @param t java bean对象
* @param cls
* @return
*/
public static <T> String getXmlByBean(T t, Class<T> cls){
return getXmlString(getDocument(t, cls));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: