工具类XMLUtils

Posted 朱李洛克

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工具类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工具里面也有相应的工具,非常方便。

以上是关于工具类XMLUtils的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch代码片段,及工具类SearchEsUtil.java

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

项目框架要涉及的东西

PHP代码-psysh调试代码片段工具

微信小程序代码片段

如何在片段中使用按钮[关闭]