java xml、map转换工具类
来源:互联网 发布:华南师范大学网络平台 编辑:程序博客网 时间:2024/06/09 17:17
package comimport java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;/** * xml/map转换工具类 */public class XmlMapUtil{ /** * xml字符串转map * @param xml * @return */ public static Map<String, Object> xml2map(String xml) { Document doc = null; try { //将xml字符串转为document对象 doc = DocumentHelper.parseText(xml); } catch (DocumentException e) { LoggerManager.error(XmlMapUtil.class, e, "响应参数解析失败:{}", xml); } Map<String, Object> map = new HashMap<>(); if (doc == null) { return map; } else { //获取根节点 Element rootElement = doc.getRootElement(); element2map(rootElement, map); } return map; } /** * map转xml字符串 * @param map * @return */ public static String map2xml(Map<String, Object> map, String rootElement) { StringBuffer xmlStr = new StringBuffer(""); if (CollectionUtility.isEmpty(map)) return xmlStr.toString(); xmlStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><" + rootElement + ">"); map2Element(map, xmlStr); xmlStr.append("</" + rootElement + ">"); return xmlStr.toString(); } /** * 递归原则 : 一个map对应一个xml节点,key为当前xml节点名,value为当前xml节点子集 * 如果xml节点没有子节点(叶子节点),那么map的key为xml节点名,value为xml节点文本内容 * 如果xml节点有一个子节点,那么map的key为xml节点名,value为xml节点子集 * 如果xml节点有多个子节点,对应map的key不存在(每一次),map的key为xml节点名,value为xml节点子集 * 如果xml节点有多个子节点,对应map的key已存在,且value为map类型(第二次),map的key为xml节点名,值从map类型转为list,而list中添加2份当前xml节点子集 * 如果xml节点有多个子节点,对应map的key已存在,且value为list类型(第三/多次),那么直接加到list中去. * @param elmt * @param map * @see [类、类#方法、类#成员] */ @SuppressWarnings("unchecked") private static void element2map(Element elmt, Map<String, Object> map) { if (null == elmt) { return; } String name = elmt.getName(); //判断当前节点的内容是否为文本(最里面一层节点) if (elmt.isTextOnly()) { map.put(name, elmt.getText()); } else { Map<String, Object> mapSub = new HashMap<>(); //获取当前节点的所有子节点 List<Element> elements = (List<Element>)elmt.elements(); //利用递归获取节点值 for (Element elmtSub : elements) { element2map(elmtSub, mapSub); } Object first = map.get(name); //判断 if (null == first) { map.put(name, mapSub); } else { if (first instanceof List<?>) { ((List<Map<String, Object>>)first).add(mapSub); } else { List<Object> listSub = new ArrayList<Object>(); listSub.add(first); listSub.add(mapSub); map.put(name, listSub); } } } } /** * 递归map转xml字符串 * @param map * @param sb */ @SuppressWarnings("unchecked") private static void map2Element(Map<String, Object> map, StringBuffer sb) { Set<String> set = map.keySet(); for (Iterator<String> it = set.iterator(); it.hasNext();) { String key = (String)it.next(); Object value = map.get(key); if (null == value) value = ""; if (value instanceof List<?>) { List<Object> list = (List<Object>)map.get(key); sb.append("<" + key + ">"); for (int i = 0; i < list.size(); i++) { Map<String, Object> hm = (Map<String, Object>)list.get(i); map2Element(hm, sb); } sb.append("</" + key + ">"); } else { if (value instanceof Map<?, ?>) { sb.append("<" + key + ">"); map2Element((Map<String, Object>)value, sb); sb.append("</" + key + ">"); } else { sb.append("<" + key + ">" + value + "</" + key + ">"); } } } }}
阅读全文
0 0
- java xml、map转换工具类
- XML数据转换为Map工具类
- XML解析与Map、Json转换,Dom4j-工具类
- 一个xml和map相互转换的工具类
- Java 对象和xml转换工具类
- Java---List、Map、String相互转换工具类
- java转换xml、list、map和json
- Java转换xml、list、map和json
- java将XML数据转换成Map
- java转换xml、list、map和json
- java转换xml、list、map和json
- java转换xml、list、map和json
- java转换xml、list、map和json
- java转换xml、list、map和json
- 关于xml文件转换成java对象以及java对象转换成xml的工具类
- java数据类型转换____Dom4j框架xml和map转换
- java实现对象转换为map、xml字符串转化为map、map转化为xml字符串
- xml与json转换工具java版
- HTML------简单的搜索框自动弹出内容提示
- 递归的应用及理解
- Vue+Webpack使用规范
- 如何通过adb指令判断手机终端走的什么数据业务
- Codeforces Round #269 (Div. 2) A. MUH and Sticks
- java xml、map转换工具类
- 学习delphi FMX 的一些资料
- 20171026Link
- 【linux小白学习之路】Ubuntu14.04安装某狗输入法
- python __getattr__,__setattr__方法的理解
- TP5 layui 数组表格的排序问题
- leetcode 681 Next Closest Time
- 饮料代理商要不要做新品?饮料新品选择需要注意哪些
- java导出word之freemarker导出(详细教程)