前端之家收集整理的这篇文章主要介绍了
Map与XML的转换,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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();
}
}
}