java xml to map_XmlMapConverter(Map与Xml互转)
XmlMapConverter.javapackage cn.microvideo.etc.util;import com.alibaba.fastjson.JSONObject;import org.apache.commons.lang3.StringUtils;import org.dom4j.Document;import org.dom4j.DocumentHelper;import o
XmlMapConverter.java
package cn.microvideo.etc.util;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.StringWriter;
import java.util.*;
/**
* title: XmlMap
* projectName maven_web
* description: TODO
* date 2019/8/6 15:02
*
* @author yanyd
* @since 1.0
*/
public class XmlMapConverter {
private static final String DEFAULT_XML_ROOT_NAME = "Document";
private static final String DEFAULT_XML_ENCODING = "UTF-8";
private static final OutputFormat DEFAULT_OUTPUT_FORMAT;
private static final String DEFAULT_LIST_NAME = "Value";
static{
DEFAULT_OUTPUT_FORMAT = new OutputFormat(" ", true);
DEFAULT_OUTPUT_FORMAT.setEncoding(DEFAULT_XML_ENCODING);
}
/**
* MAP->XML
* @param map map
* @param rootName 根节点名称
* @return XML(String)
* @throws Exception
*/
public static String mapToXml(Map map, String rootName) throws Exception {
return mapToXml(map, rootName, DEFAULT_OUTPUT_FORMAT);
}
/**
* MAP->XML
* @param map map
* @param rootName 根节点名称
* @param outputFormat 输出格式
* @return XML(String)
* @throws Exception
*/
public static String mapToXml(Map map, String rootName, OutputFormat outputFormat) throws Exception {
if (map == null){
throw new RuntimeException("[XmlMapConverter]can't convert null map into xml");
}
if (rootName == null || rootName.length() <= 0){
rootName = DEFAULT_XML_ROOT_NAME;
}
Element root = DocumentHelper.createElement(rootName);
Document document = DocumentHelper.createDocument(root);
convert(map, root, rootName);
StringWriter stringWriter = new StringWriter();
XMLWriter xmlWriter = new XMLWriter(stringWriter, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
return stringWriter.toString();
}
private static void convert(Object obj, Element element, String elementName) {
if (obj == null || element == null){
return;
}
if (obj instanceof Map){
if (((Map)obj).size() <= 0){
return;
}
for (Object entry : ((Map)obj).entrySet()){
String name = String.valueOf(((Map.Entry) entry).getKey());
Object data = ((Map.Entry) entry).getValue();
if (data instanceof Map) {
convert(data, element.addElement(name), name);
} else if (data instanceof List){
convert(data, element, name);
} else {
Element subElement = element.addElement(name);
data=data==null?"":data;
subElement.addText(String.valueOf(data));
}
}
}else if(obj instanceof List){
if (((List)obj).size() <= 0){
return;
}
for (Object data : ((List)obj)){
if (data instanceof Map) {
convert(data, element.addElement(elementName), elementName);
} else if (data instanceof List){
convert(data, element.addElement(elementName), DEFAULT_LIST_NAME);
} else {
Element subElement = element.addElement(elementName);
data=data==null?"":data;
subElement.addText(String.valueOf(data));
}
}
}
}
public static Map xmlToMap(String xml) throws Exception {
if (xml == null || xml.length() <= 0){
throw new Exception("[XmlMapConverter]can't convert null xml into map");
}
Document document = DocumentHelper.parseText(xml);
Element root = document.getRootElement();
Map map = new HashMap();
convert(root, map);
return map;
}
private static void convert(Element element, Map map){
if (element == null || map == null){
return;
}
List subElements = element.elements();
if (subElements == null || subElements.size() <= 0){
return;
}
for (Object subElement : subElements){
if (!(subElement instanceof Element)) {
continue;
}
String name = ((Element) subElement).getName();
Object data = null;
if (((Element) subElement).isTextOnly()){
data = ((Element) subElement).getData();
}else{
data = new HashMap();
convert((Element)subElement, (Map)data);
}
Object preData = map.remove(name);
if (preData != null){
if (preData instanceof List){
((List) preData).add(data);
map.put(name, preData);
}else{
List list = new ArrayList();
list.add(preData);
list.add(data);
map.put(name, list);
}
}else if (data != null){
map.put(name, data);
}
}
}
public static void main(String[] args) throws Exception {
HashMap map=new HashMap<>();
List list=new ArrayList<>();
map.put("k",null);
System.out.println(mapToXml(map,""));
}
}
pom.xml
dom4j
dom4j
1.6.1
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)