zoukankan      html  css  js  c++  java
  • XmlBeanMap convert



    import com.thoughtworks.xstream.XStream;
    import java.io.StringReader;
    import java.lang.reflect.Field;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;

    public class XMLBeanUtil {

    private static final XStream xStream = XStreamFactory.getXStream();

    /**
    * xml转对象
    * @param xml xml字符串
    * @param bean bean
    * @param ignoreCase 是否不区分大小写匹配
    * @return bean
    */
    public static <T> T xmlToBean(String xml, T bean, boolean ignoreCase) {
    Map<String, String> nodeMap = XMLBeanUtil.xmlToMap(xml);
    return mapToBean(nodeMap, bean, ignoreCase);
    }

    /**
    * xml转对象
    * @param xml xml字符串
    * @return Map
    */
    public static Map<String, String> xmlToMap(String xml) {
    try {
    SAXReader sax = new SAXReader();//创建一个SAXReader对象
    StringReader read = new StringReader(xml);
    Document document = sax.read(read);//获取document对象,如果文档无节点,则会抛出Exception提前结束
    Element root = document.getRootElement();//获取根节点
    Map<String, String> nodeMap = new HashMap<>();
    getNode(root, nodeMap);
    return nodeMap;
    } catch (DocumentException e) {
    return new HashMap<>();
    }
    }

    public static <T> T mapToBean(Map<String, String> map, T bean, boolean ignoreCase) {
    Field[] fields = bean.getClass().getDeclaredFields();
    if (ignoreCase) {
    for (Field f : fields) {
    for (String k : map.keySet()) {
    if (k.equalsIgnoreCase(f.getName())) {
    f.setAccessible(true);
    try {
    f.set(bean, map.get(k));
    } catch (IllegalAccessException ignore) {
    }
    }
    }
    }
    } else {
    for (Field f : fields) {
    for (String k : map.keySet()) {
    if (k.equals(f.getName())) {
    f.setAccessible(true);
    try {
    f.set(bean, map.get(k));
    } catch (IllegalAccessException ignore) {
    }
    }
    }
    }
    }

    return bean;
    }

    private static void getNode(Element root, Map<String, String> nodeMap) {
    List<Element> list = root.elements();
    for (Element e : list) {
    if ("".equals(e.getTextTrim())) {
    getNode(e, nodeMap);
    } else {
    nodeMap.put(e.getName(), e.getTextTrim());
    }
    }
    }
    /**
    * 对象转xml
    * @param obj 对象
    * @return String
    */
    public static String toXml(Object obj) {
    xStream.processAnnotations(obj.getClass());
    return xStream.toXML(obj);
    }
    }
  • 相关阅读:
    方维P2P  二次开发
    Array 数组去重 总结10方法(7)
    PHP  OOP学习总结
    [转载]js:数组里面获取键名和键值
    Array对象的方法实现(6)----Array.prototype.indexOf(实现常规参数的功能)
    在Apache服务器上启用GZip压缩静态内容的方法
    PHP 程序授权验证开发思路
    【转】zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
    公钥私钥,HTTPS,CA证书机构,单向和双向认证
    Array对象的方法实现(5)----Array.prototype.includes(实现常规参数的功能)
  • 原文地址:https://www.cnblogs.com/zfzf1/p/11326613.html
Copyright © 2011-2022 走看看