package com.example;
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 (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));
}
}