XML与map之间转换JAVA


import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class XmlUtil {
    //XML转为MAP
    public static Map<String, Object> xmlToMap(String str) throws Exception {
        Map<String, Object> resultMap = new LinkedHashMap<>();
        String st ="";
        int length = str.length();
        for (int i = 0; i < length;i++) {
            char c = str.charAt(i);
            if (c!=10){
                st = st+String.valueOf(c);
            }

        }
        Document doc = DocumentHelper.parseText(st);
        Element rootElement = doc.getRootElement();//根目录  个数肯定为1
        List<Element> childrenElementList = rootElement.elements();//二级目录 个数大于等于1
        for (Element e : childrenElementList) {
            List<Element> thirdElementList = e.elements();//三级目录
            if (thirdElementList.size() > 0) {//三级目录大于0
                element2Map(resultMap, e);
            } else {//三级目录等于0 直接将二级的元素存到map
                resultMap.put(e.getName(), e.getText());
            }
        }
        return resultMap;
    }

    /**
     * XML解析为Map
     */
    public static Map<String, Object> element2Map(Map<String, Object> map, Element rootElement) throws Exception {
        Map<String, Object> tempMap = new LinkedHashMap<>();
        List<Element> childrenElementList = rootElement.elements();//三级目录(肯定大于0因为外层已经判断了)
        //遍历所有子节点
        for (Element e : childrenElementList) {
            List<Element> nextElementList = e.elements();//四级目录
            if (nextElementList.size() > 0) {//四级目录大于0则继续循环
                element2Map(tempMap, e);
            } else {//四级目录等于0则将三级目录存进去
                tempMap.put(e.getName(), e.getText());
            }
        }
        map.put(rootElement.getName(), tempMap);
        return map;
    }

    //MAP转为XML
    public static String mapToXml(LinkedHashMap map){
        StringBuffer sb = new StringBuffer();
        map.forEach((key,value)->{
            sb.append("<"+key+">"+value+"</"+key+">"+"\n");
        });

        return sb.toString();
    }

    public static void main(String[] args) {
        LinkedHashMap<Object, Object> map = new LinkedHashMap<>();
        map.put("abc","测试1");
        map.put("fsds","测试2");
        map.put("wes","测试3");
        map.put("hgjh","测试4");
        map.put("nbnb","测试5");
        String s = mapToXml(map);
        System.out.println(s);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值