Xml2MapUtil工具类

待我称王封你为后i 2024-04-19 15:54 92阅读 0赞

感觉不是最简的,有点报黄,后期修复下,不过毕竟生产用过还是可以信赖的

  1. package com.scai.dispatcher.util;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import com.scai.dispatcher.exception.BaseException;
  10. import org.apache.commons.lang.StringUtils;
  11. import org.dom4j.Document;
  12. import org.dom4j.DocumentHelper;
  13. import org.dom4j.Element;
  14. /**
  15. * @version 1.0
  16. * @date 创建时间:2019年3月6日 下午4:29:13
  17. */
  18. public class Xml2MapUtil {
  19. public static Map<String, Object> xml2map(String xml) throws BaseException {
  20. Map<String, Object> rootmap = new HashMap<>();
  21. if(StringUtils.isBlank(xml)){
  22. return rootmap;
  23. }
  24. try{
  25. Document doc;
  26. doc = DocumentHelper.parseText(xml);
  27. Map<String, Object> map = new HashMap<>();
  28. if (doc == null)
  29. return map;
  30. Element rootElement = doc.getRootElement();
  31. map = xml2map2(rootElement);
  32. rootmap.put(rootElement.getName(), map);
  33. }catch(Exception e){
  34. e.printStackTrace();
  35. throw new BaseException("3011","XML解析异常");
  36. }
  37. return rootmap;
  38. }
  39. private static Map<String, Object> xml2map2(Element _elem) {
  40. Map<String, Object> result = new HashMap<>();
  41. String _elemName = _elem.getName();
  42. // String _elemAttriName = _elem.attributeValue("name");
  43. List<Element> list = _elem.elements();
  44. // if (!"struct".equals(_elemName) && !"field".equals(_elemName) && (null == list || list.size() <= 0)) {
  45. // return result;
  46. // }
  47. if ("array".equals(_elemName)) {
  48. List<Map<String,Object>> arayList = new ArrayList<>();
  49. for (int i = 0;list != null && i < list.size(); i++) {
  50. Element elem = list.get(i);
  51. arayList.add(xml2map2(elem));
  52. }
  53. result.put(_elem.getParent().attributeValue("name"), arayList);
  54. }
  55. else if ("struct".equals(_elemName)) {
  56. Map tempMap = new HashMap();
  57. for (int i = 0;list != null && i < list.size(); i++) {
  58. Element elem = list.get(i);
  59. tempMap.putAll(xml2map2(elem));
  60. }
  61. Element __elem = _elem.getParent();
  62. if("data".equals(__elem.getName())){
  63. result.put(_elem.getParent().attributeValue("name"), tempMap);
  64. }
  65. if("array".equals(__elem.getName())){
  66. result.putAll(tempMap);
  67. }
  68. }
  69. else if ("field".equals(_elemName)) {
  70. result.put(_elem.getParent().attributeValue("name"), _elem.getStringValue());
  71. }
  72. else if ("data".equals(_elemName)) {
  73. for (int i = 0;list != null && i < list.size(); i++) {
  74. Element elem = list.get(i);
  75. String elemName = elem.getName();
  76. if ("field".equals(elemName)) {
  77. //字段 map单个元素
  78. result = xml2map2(elem);
  79. }
  80. if ("struct".equals(elemName)) {
  81. //对象 map1个元素(map<key,value>)
  82. result = xml2map2(elem);
  83. }
  84. if ("array".equals(elemName)) {
  85. //数组 map1个元素(List<>)
  86. result = xml2map2(elem);
  87. }
  88. }
  89. }
  90. else if ("body".equals(_elemName)) {
  91. Map tempMap = new HashMap();
  92. for (int i = 0; list != null && i < list.size(); i++) {
  93. Element elem = list.get(i);
  94. tempMap.putAll(xml2map2(elem));
  95. }
  96. result.put(_elemName, tempMap);
  97. }
  98. else if("service".equals(_elemName)){
  99. for (int i = 0;list != null && i < list.size(); i++) {
  100. Element elem = list.get(i);
  101. result.putAll(xml2map2(elem));
  102. }
  103. }
  104. else {
  105. for (int i = 0; list != null && i < list.size(); i++) {
  106. Element elem = list.get(i);
  107. result=xml2map2(elem);
  108. }
  109. }
  110. return result;
  111. }
  112. private static Map<String, Object> xml2map22(Element _elem) {
  113. Map<String, Object> result = new HashMap<>();
  114. List<Element> list = _elem.elements();
  115. String _elemName = _elem.getName();
  116. String _elemAttriName = _elem.attributeValue("name");
  117. if (null == list || list.size() <= 0) {
  118. return result;
  119. }
  120. int size = list.size();
  121. for (int i = 0; i < size; i++) {
  122. Element elem = list.get(i);
  123. String nodeName = elem.getName().toString();
  124. String nodeAttriName = elem.attributeValue("name");
  125. if ("struct".equals(nodeName)) {
  126. List subNodes = elem.elements();
  127. if (null != subNodes && subNodes.size() != 0) {
  128. Map subMap;
  129. for (int j = 0; j < subNodes.size(); j++) {
  130. Element subElem = (Element) subNodes.get(j);
  131. subMap = xml2map2(subElem);
  132. result.putAll(subMap);
  133. }
  134. } else {
  135. // result = new HashMap<>();
  136. }
  137. } else if ("data".equals(nodeName)) {
  138. List subNodes = elem.elements();
  139. if (null != subNodes && subNodes.size() > 0) {
  140. for (int j = 0; j < subNodes.size(); j++) {
  141. Element subElem = (Element) subNodes.get(j);
  142. String subNodeAttriName = subElem.attributeValue("name");
  143. String subNodeName = subElem.getName();
  144. if ("struct".equals(subNodeName)) {
  145. Map subMap = xml2map2(subElem);
  146. result.put(nodeAttriName, subMap);
  147. }
  148. if ("array".equals(subNodeName)) {
  149. List arrayList = (ArrayList) result.get(nodeAttriName);
  150. if (null == arrayList) {
  151. arrayList = new ArrayList();
  152. arrayList.add(xml2map2(elem));
  153. result.put(nodeAttriName, arrayList);
  154. } else {
  155. arrayList.add(xml2map2(elem));
  156. result.put(nodeAttriName, arrayList);
  157. }
  158. }
  159. if ("field".equals(subNodeName)) {
  160. result.putAll(xml2map2(elem));
  161. }
  162. }
  163. }
  164. } else if ("field".equals(nodeName)) {
  165. String nodeAttriType = elem.attributeValue("type");
  166. if ("string".equals(nodeAttriType)) {
  167. result.put(_elemAttriName, elem.getStringValue());
  168. } else {
  169. result.put(_elemAttriName, elem.getStringValue());
  170. }
  171. } else if ("array".equals(nodeName)) {
  172. result.putAll(xml2map2(elem));
  173. } else if ("body".equals(nodeName)) {
  174. Map subMap = xml2map2(elem);
  175. result.put(nodeName, subMap);
  176. } else {
  177. if (elem.elements() != null && elem.elements().size() > 0) {
  178. Map subMap = xml2map2(elem);
  179. result.putAll(subMap);
  180. } else {
  181. String nodeText = elem.getText().trim();
  182. if (isEmpty(nodeText)) {
  183. result.put(nodeName, null);
  184. } else {
  185. result.put(nodeName, nodeText);
  186. }
  187. }
  188. }
  189. }
  190. return result;
  191. }
  192. // }
  193. // // TODO
  194. // Map arrayMap = new HashMap();
  195. // temp.add(arrayMap);
  196. //
  197. // List subNodes = elem.elements();
  198. // if (null !=subNodes && subNodes.size() > 0) {
  199. // for (int j = 0; j < subNodes.size(); j++) {
  200. // Element subElem = (Element) subNodes.get(j);
  201. // String subNodeName = subElem.getName();
  202. // subNodeName = subNodeName.toLowerCase(Locale.ENGLISH);
  203. // List arrayList = (ArrayList)arrayMap.get(subNodeName);
  204. // if(null == arrayList){
  205. // arrayList = new ArrayList();
  206. // arrayMap.put(subNodeName, arrayList);
  207. // }
  208. //
  209. // Map subMap = xml2map2(subElem);
  210. // arrayList.add(subMap);
  211. // }
  212. // }
  213. public static boolean isEmpty(String text) {
  214. return text != null && !"".equals(text);
  215. }
  216. private static String readString3() {
  217. String str ;
  218. File file = new File("E:\\work\\众邦银行众易贷\\9、ESB\\request_std.xml");
  219. try {
  220. FileInputStream in = new FileInputStream(file);
  221. // size 为字串的长度 ,这里一次性读完
  222. int size = in.available();
  223. byte[] buffer = new byte[size];
  224. in.read(buffer);
  225. in.close();
  226. str = new String(buffer, "utf-8");
  227. } catch (IOException e) {
  228. // TODO Auto-generated catch block
  229. e.printStackTrace();
  230. return null;
  231. }
  232. return str;
  233. }
  234. }

发表评论

表情:
评论列表 (有 0 条评论,92人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mapUtil

    在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJs

    相关 Java XML解析工具

    Java XML解析工具类 Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类 本身是有个需求,讲三方公司的XML请求

    相关 轻松解析XML工具

    \[b\]\[color=green\]\[size=large\]在我们的各种项目中,XML文件读取与解析非常频繁,正是因为有了XML文件,才使得我们的程序架构更加灵活,我们