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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐