package com.isoftstone.pcis.tool;
import java.io.StringReader;
import java.util.*;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
public class XmlTool {
public static Map<String, Object> Xml2Map(String xml)
throws DocumentException {
if(xml==null||"".equals(xml)){
return null;
}
SAXReader reader = new SAXReader();
SAXReader saxReader = new SAXReader();
StringReader sr = new StringReader(xml);
Document document = reader.read(sr);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
Element root = document.getRootElement();
return Dom2Map(root);
}
private static Map Dom2Map(Element e) {
Map map = new HashMap();
List list = e.elements();
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Element iter = (Element) list.get(i);
List mapList = new ArrayList();
if (iter.elements().size() > 0) {
Map m = Dom2Map(iter);
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!obj.getClass().getName().equals(
"java.util.ArrayList")) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(m);
}
if (obj.getClass().getName().equals(
"java.util.ArrayList")) {
mapList = (List) obj;
mapList.add(m);
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), m);
} else {
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!obj.getClass().getName().equals(
"java.util.ArrayList")) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(iter.getText());
}
if (obj.getClass().getName().equals(
"java.util.ArrayList")) {
mapList = (List) obj;
mapList.add(iter.getText());
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), iter.getText());
}
}
} else
map.put(e.getName(), e.getText());
return map;
}
public static void main(String[] args) {
String xmlstr = "<?xml version=\"1.0\"?>"+
"<font>"+
" <name><a></a></name>"+
" <size>36</size>"+
"</font>";
try {
Map map = Xml2Map(xmlstr);
Map<String, Object> baseMap = new HashMap<String, Object>();
Map<String, String> mappingMap = new HashMap<String, String>();
mappingMap.put("N_FAC_MIN", "factormin");
mappingMap.put("N_FAC_MAX", "factormin");
mappingMap.put("N_HOPE_PRM", "hopeprm");
mappingMap.put("N_HOPE_RATE", "hoperate");
mappingMap.put("N_FIT_RATE", "fittingrate");
mappingMap.put("N_FIT_PRM", "fittingprm");
baseMap = getNewMapWithMapKey(mappingMap,map);
Map<String, String> cvrgMappingMap = new HashMap<String, String>();
cvrgMappingMap.put("C_CVRG_NO", "ccvrgno");
cvrgMappingMap.put("N_RATE_FAC_MUL", "nratefactormul");
cvrgMappingMap.put("N_RISK_PRM", "npureriskpremium");
cvrgMappingMap.put("N_BAS_PRM", "nbasepremium");
cvrgMappingMap.put("N_ACTUARY_PRM", "npremium");
Map<String, Object> cvrgDataMap = (Map)map.get("apInfos");
List<Map<String, Object>> cvrgApList = new ArrayList<Map<String,Object>>();
if(cvrgDataMap!=null){
List<Map> cvrgFacData= (List<Map>)cvrgDataMap.get("apInfo");
Map<String, Object> ApMap = new HashMap<String, Object>();
for (int i = 0; i < cvrgFacData.size(); i++) {
ApMap = getNewMapWithMapKey(cvrgMappingMap,cvrgFacData.get(i));
cvrgApList.add(ApMap);
}
}
Map<String, String> facMappingMap = new HashMap<String, String>();
facMappingMap.put("C_VAL_CDE", "code");
facMappingMap.put("N_VAL_MIN", "min");
facMappingMap.put("N_VAL_MAX", "max");
facMappingMap.put("N_VAL_NUM", "value");
Map<String, Object> facDataMap = (Map)map.get("factorInfos");
List<Map<String, Object>> facList = new ArrayList<Map<String,Object>>();
if(facDataMap!=null){
List<Map> facData= (List<Map>)facDataMap.get("factorInfo");
Map<String, Object> facMap = new HashMap<String, Object>();
for (int i = 0; i < facData.size(); i++) {
facMap = getNewMapWithMapKey(facMappingMap,facData.get(i));
facList.add(facMap);
}
}
System.out.println(11);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//**************************************************************************
public static Map<String, Object> getNewMapWithMapKey(Map<String, String> mappingMap,Map<String, Object>dataMap){
Map<String, Object> returnMap = new HashMap<String, Object>();
Set keySet = mappingMap.keySet();
Iterator iterator = keySet.iterator();
while(iterator.hasNext()){
String key = iterator.next()+"";
returnMap.put(key, dataMap.get(mappingMap.get(key)));
}
return returnMap;
}
}