【工具類】XMLUtils
阿新 • • 發佈:2021-06-18
在使用這個類之前,你需要匯入以下依賴
<!--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工具裡面也有相應的工具,非常方便。