1. 程式人生 > 其它 >【工具類】XMLUtils

【工具類】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工具裡面也有相應的工具,非常方便。