package com.csdn.map; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class MapUtil { /** * 字节数组先转换为Document * @param byArr */ public static void bytetoMap(byte[] byArr) { SAXBuilder builder = new SAXBuilder(); ByteArrayInputStream in = new ByteArrayInputStream(byArr); try { Document doc = builder.build(in); Element root = doc.getRootElement(); System.out.println(root.getName());//中国 // Element 转换为 Map Map<String,Object> map = elementToMap(root); Set<Map.Entry<String,Object>> set = map.entrySet(); for(Map.Entry<String,Object> entry : set) { System.out.println(entry.getKey()+"---"+entry.getValue()); } String rootName = root.getName(); // Map 转换为 xml String xml = mapToXml(map,rootName); System.out.println(xml); } catch (JDOMException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } } /** * Element转换为Map * @param root * @return */ public static Map<String,Object> elementToMap(Element root) { //获取root下的所有子节点 List<Element> rChildren= root.getChildren(); Map<String,Object> reTurnMap = new HashMap<String,Object>(); for(Element element : rChildren) { List<Element> eChildren= element.getChildren(); if(null != eChildren && eChildren.size() > 0) { //节点下还有子节点 reTurnMap.put(element.getName(),elementToMap(element)); } else { //节点下已没有子节点 if(!reTurnMap.containsKey(element.getName())) { reTurnMap.put(element.getName(),element.getText()); } else { Object value = reTurnMap.get(element.getName()); if (value instanceof List) { ((List)value).add(element.getTextTrim()); reTurnMap.put(element.getName(),value); } else { List array = new ArrayList(); array.add(value); array.add(element.getTextTrim()); reTurnMap.put(element.getName(),array); } } } } return reTurnMap; } /** * Map 转换为 xml * @param map * @param rootName * @return */ public static String mapToXml(Map<String,Object> map,String rootName) { Document doc = new Document(); // doc.se Element root = new Element(rootName); // Map 转换为 Element maptoElement(map,root); doc.setRootElement(root); XMLOutputter outputer = new XMLOutputter(); outputer.setFormat(Format.getPrettyFormat()); return outputer.outputString(doc); } private static Element maptoElement(Map<String,Element root) { Set<Map.Entry<String,Object>> set = map.entrySet(); for(Map.Entry<String,Object> entry : set) { System.out.println(entry.getKey()+"---"+entry.getValue()); Element element = new Element(entry.getKey()); Object obj = entry.getValue(); if(obj instanceof Map) { // value 为 Map 类型 root.addContent(maptoElement((Map<String,Object>)obj,element)); } else { element.setText(entry.getValue().toString()); root.addContent(element); } } return root; } public static void main(String[] args) { String xml = "<中国><江苏><南京><白下区>10</白下区><江宁区>10</江宁区></南京></江苏><浙江>杭州</浙江></中国>"; System.out.println(xml);//<中国><江苏><南京><白下区>10</白下区><江宁区>10</江宁区></南京></江苏><浙江>杭州</浙江></中国> byte[] byArr = null; try { byArr = xml.getBytes("UTF-8"); bytetoMap(byArr); } catch (UnsupportedEncodingException e) { e.printstacktrace(); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。