Fixed XmlTransferMapUtils.

pull/235/head
ruibaby 2019-07-09 15:46:38 +08:00
parent 4b0b9d5245
commit c52e295f9a
1 changed files with 105 additions and 101 deletions

View File

@ -1,101 +1,105 @@
package xyz.guqing.transfer.processor; package run.halo.app.utils;
import org.dom4j.Document; import org.dom4j.Document;
import org.dom4j.Element; import org.dom4j.Element;
import org.dom4j.io.SAXReader; import org.dom4j.io.SAXReader;
import java.io.*; import java.io.File;
import java.util.*; import java.io.FileInputStream;
import java.util.*;
/**
* wordpressxmlMap /**
* @uthor guqing * WordPress xml Map
*/ *
public class TransferMapProcessor { * @author guqing
// 存储在此集合中的节点名称都会被解析为一个List存储 */
private static final List<String> ARRAY_PROPERTY = Arrays.asList(new String[]{"channel", "item", "category", "postmeta", "comment"}); public class XmlTransferMapUtils {
/** /**
* xmlxmlrootElement * List
* @param file xml */
* @return private static final List<String> ARRAY_PROPERTY = Arrays.asList("channel", "item", "category", "postmeta", "comment");
*/
public Element getRootElement(File file) { /**
try { * xml xml rootElement
SAXReader saxReader = new SAXReader(); *
FileInputStream fileInputStream = new FileInputStream(file); * @param file xml
Document document = saxReader.read(fileInputStream); * @return
Element rootElement = document.getRootElement(); */
public Element getRootElement(File file) {
return rootElement; try {
} catch (Exception e) { SAXReader saxReader = new SAXReader();
throw new RuntimeException("can not get root element"); FileInputStream fileInputStream = new FileInputStream(file);
} Document document = saxReader.read(fileInputStream);
} return document.getRootElement();
} catch (Exception e) {
throw new RuntimeException("can not get root element");
/** }
* Map }
* @param root xml
* @return xmlMap
*/ /**
public Map<String, Object> getResultSetMapping(Element root) { * Map
Map<String, Object> result = new HashMap<String, Object>(); *
* @param root xml
try { * @return xmlMap
// 获取根元素的所有子元素 */
List<Element> children = root.elements(); public Map<String, Object> getResultSetMapping(Element root) {
Map<String, Object> result;
//递归遍历将xml节点数据解析为Map结果集 try {
result = transfer2Map(children,null); // 获取根元素的所有子元素
} catch (Exception e) { List<Element> children = root.elements();
throw new RuntimeException("can not transfer xml file to map." + e.getMessage());
} //递归遍历将xml节点数据解析为Map结果集
result = transfer2Map(children, null);
return result; } catch (Exception e) {
} throw new RuntimeException("can not transfer xml file to map." + e.getMessage());
}
/**
* xmlN return result;
* @param elements }
* @param list
* @return Map /**
*/ * xmlN
private Map<String, Object> transfer2Map(List<Element> elements,List<Map<String,Object>> list){ *
Map<String, Object> map = new HashMap<String, Object>(); * @param elements
* @param list
for(Element element : elements){ * @return Map
String name = element.getName(); */
//如果是定义成数组 private Map<String, Object> transfer2Map(List<Element> elements, List<Map<String, Object>> list) {
if(ARRAY_PROPERTY.contains(name)) { Map<String, Object> map = new HashMap<String, Object>();
//继续递归循环
List<Map<String,Object>> sublist = new ArrayList<Map<String,Object>>(); for (Element element : elements) {
String name = element.getName();
Map<String,Object> subMap = this.transfer2Map(element.elements(), sublist); //如果是定义成数组
if (ARRAY_PROPERTY.contains(name)) {
//根据key获取是否已经存在 //继续递归循环
Object object = map.get(name); List<Map<String, Object>> sublist = new ArrayList<Map<String, Object>>();
//如果存在,合并
if(object !=null ){ Map<String, Object> subMap = this.transfer2Map(element.elements(), sublist);
List<Map<String,Object>> olist = (List<Map<String,Object>>)object;
olist.add(subMap);// //根据key获取是否已经存在
map.put(name, olist); Object object = map.get(name);
}else{ //如果存在,合并
//否则直接存入map if (object != null) {
map.put(name, sublist); List<Map<String, Object>> olist = (List<Map<String, Object>>) object;
} olist.add(subMap);
}else { map.put(name, olist);
//单个值存入map } else {
map.put(name, element.getTextTrim()); //否则直接存入map
} map.put(name, sublist);
} }
} else {
//存入list中 //单个值存入map
if(list != null) { map.put(name, element.getTextTrim());
list.add(map); }
} }
//返回结果集合 //存入list中
return map; if (list != null) {
} list.add(map);
} }
//返回结果集合
return map;
}
}