zoukankan      html  css  js  c++  java
  • 【工具类】XMLUtils

    在使用这个类之前,你需要导入以下依赖

            <!--XML-->
            <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.6.1</version>
            </dependency>
    

    工具类如下

    package tool.xml;
    
    import org.dom4j.Element;
    
    import java.lang.reflect.Field;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class XMLUtils {
    
        /**
         * json 数据转换对象
         *
         * @param rootElt 要转换的Element数据
         * @param pojo    要转换的目标对象类型
         * @return 转换的目标对象
         * @throws Exception 转换失败
         */
        public static Object fromXmlToBean(Element rootElt, Class<?> pojo) throws Exception {
            // 首先得到pojo所定义的字段
            Field[] fields = pojo.getDeclaredFields();
            // 根据传入的Class动态生成pojo对象
            Object obj = pojo.newInstance();
            for (Field field : fields) {
                // 设置字段可访问(必须,否则报错)
                field.setAccessible(true);
                // 得到字段的属性名
                String name = field.getName();
                // 这一段的作用是如果字段在Element中不存在会抛出异常,如果出异常,则跳过。
                try {
                    rootElt.elementTextTrim(name);
                } catch (Exception ex) {
                    continue;
                }
                if (rootElt.elementTextTrim(name) != null && !"".equals(rootElt.elementTextTrim(name))) {
                    // 根据字段的类型将值转化为相应的类型,并设置到生成的对象中。
                    if (field.getType().equals(Long.class) || field.getType().equals(long.class)) {
                        field.set(obj, Long.parseLong(rootElt.elementTextTrim(name)));
                    } else if (field.getType().equals(String.class)) {
                        field.set(obj, rootElt.elementTextTrim(name));
                    } else if (field.getType().equals(Double.class) || field.getType().equals(double.class)) {
                        field.set(obj, Double.parseDouble(rootElt.elementTextTrim(name)));
                    } else if (field.getType().equals(Integer.class) || field.getType().equals(int.class)) {
                        field.set(obj, Integer.parseInt(rootElt.elementTextTrim(name)));
                    } else if (field.getType().equals(Date.class)) {
                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                        Date date = format.parse(rootElt.elementTextTrim(name));
                        field.set(obj, date);
                    }else {
                        System.out.println("缺少"+field.getType()+"类型的在转化,可能造成数据缺失");
                    }
                }
            }
            return obj;
        }
    }
    

    使用方法

                // 将XML string 转化成 Document 对象
                Document doc = DocumentHelper.parseText(resultStr);
                // 获取根元素
                Element root = doc.getRootElement();
                // 获取某一个节点元素的迭代器
                Iterator<Element> iterator = root.element("tree").elementIterator();
                while (iterator.hasNext()) {
                    // 迭代取下一个
                    Element node = (Element) iterator.next();
                    // 转化成实体类
                    CityProjectClueRankingOneDto o = (CityProjectClueRankingOneDto) XmlUtil.fromXmlToBean(node, CityProjectClueRankingOneDto.class);
                    cityProjectClueRankingOneDtos.add(o);
                }
    

    hutool工具里面也有相应的工具,非常方便。

  • 相关阅读:
    云图小助理
    ping包的checksum校验和
    ftp相关
    初始化字符串
    安全的域名解析
    10进制转62进制
    centos6一键安装WordPress
    CEF3编译
    一次性生产KEY
    linux系统问题排查
  • 原文地址:https://www.cnblogs.com/zllk/p/14899870.html
Copyright © 2011-2022 走看看