简单的封装了一个将java bean生成xml的一个工具类,运用了反射和泛型,重用性高。

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));
    }
}



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值