今天根据别人的代码简单的封装了一个将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)); } }
相关文章推荐
- 对象,对象集合的简单Xml序列化与反序列化 【实用代码,含泛型方法】
- 今天在国外论坛上为别人解决一个简单问题
- 用C#代码生成一个简单的PDF文件
- 收了100元辛苦费,写了一个最简单的C#ASP.NET的3层架构例子代码,源码是通过代码生成器生成的【写程序的效率神奇的高】
- Java下的框架编程(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)(1)--序
- 运用CodeSmith代码生引擎生成XML报表文件。
- 用泛型与反射技术封装分页功能(示例代码)
- 一个xml转html的小程序 别人一个毕业设计【难度:简单】
- [每天一个demo]用c#实现简单的xml操作代码
- 推荐一个用C#代码生成JavsScript的简单程序集
- 一个简单的XML解析器代码
- Java下的Framework编写(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)(1)--序
- 今天在国外论坛上为别人解决一个简单问题
- 根据一个大图片自动生成相应小图片的代码
- 根据别人的MD5源码封装的一个类
- 用C#代码生成一个简单的PDF文件
- 一个简单的代码生成“器”
- 用C#代码生成一个简单的PDF文件
- 一个简单的xml类,可以解析和生成xml文件数据
- php生成xml简单实例代码