Map和xml格式資料互轉
阿新 • • 發佈:2022-04-22
Map和xml格式資料互轉
/** * map轉xml map中含有根節點的鍵 * @param map * @throws Exception */ public static String map2xml(Map<String, Object> map) throws Exception { Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator(); if(entries.hasNext()){ //獲取第一個鍵建立根節點 Map.Entry<String, Object> entry = entries.next(); Document doc = DocumentHelper.createDocument(); Element root = DocumentHelper.createElement(entry.getKey()); doc.add(root); map2xml((Map)entry.getValue(), root); String formatXml = formatXml(doc); return formatXml; } return null; } /** * map轉xml * @param map * @param body xml元素 * @return */ private static Element map2xml(Map<String, Object> map, Element body) { Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<String, Object> entry = entries.next(); String key = entry.getKey(); Object value = entry.getValue(); if(key.startsWith("@")){ //屬性 body.addAttribute(key.substring(1, key.length()), value.toString()); } else if(key.equals("#text")){ //有屬性時的文字 body.setText(value.toString()); } else { if(value instanceof java.util.List ){ List list = (List)value; Object obj; for(int i=0; i<list.size(); i++){ obj = list.get(i); //list裡是map或String,不會存在list裡直接是list的, if(obj instanceof java.util.Map){ Element subElement = body.addElement(key); map2xml((Map)list.get(i), subElement); } else { body.addElement(key).setText((String)list.get(i)); } } } else if(value instanceof java.util.Map ){ Element subElement = body.addElement(key); map2xml((Map)value, subElement); } else { body.addElement(key).setText(value.toString()); } } //System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } return body; } /** * 格式化輸出xml * @param document */ public static String formatXml(Document document) throws Exception { // 格式化輸出格式 OutputFormat format = OutputFormat.createPrettyPrint(); //format.setEncoding("UTF-8"); StringWriter writer = new StringWriter(); // 格式化輸出流 XMLWriter xmlWriter = new XMLWriter(writer, format); // 將document寫入到輸出流 xmlWriter.write(document); xmlWriter.close(); //String xmlStr = writer.toString(); //org.dom4j.Document document = DocumentHelper.parseText(xmlStr); return writer.toString(); } /** * 解析xml到map列表 * @param xml * @return */ public static List<Map<String, Object>> xmlStringToMap(String xml){ List<Map<String, Object>> rslist=new ArrayList<Map<String, Object>>(); try { Document doc = DocumentHelper.parseText(xml);//XML // 獲取根節點 Element rootElt = doc.getRootElement(); List<Element> list=rootElt.elements(); if(list!=null&&!list.isEmpty()){ Map<String, Object> resultMap =null; for(Element element:list){ resultMap = new HashMap<String, Object>(); Iterator itersElIterator = element.elementIterator(); while(itersElIterator.hasNext()){ Element itemEle = (Element) itersElIterator.next(); if(StringUtils.isNotBlank(itemEle.getName())){ resultMap.put(itemEle.getName(), itemEle.getTextTrim()); } } rslist.add(resultMap); } } } catch (Exception e) { LOG.error("解析xml字串失敗",e); } return rslist; }