新增wordpress导出xml文章数据解析器返回Map<String, Object>

pull/235/head
guqing 2019-07-09 15:39:19 +08:00 committed by GitHub
parent d4f3850cb2
commit 4b0b9d5245
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 101 additions and 0 deletions

View File

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