java xml map 相互转换

1 篇文章 0 订阅
1 篇文章 0 订阅
该博客主要介绍了如何使用Java进行XML与Map之间的转换。`converter`方法将Map转换为XML字符串,通过`synchronized`关键字确保线程安全。而`parse`方法则实现了从XML文本到Map的解析,利用`SAXReader`读取XML并转化为Map。博客还提供了辅助方法`Dom2Map`来递归处理Document和Element对象,构建多层级的Map结构。
摘要由CSDN通过智能技术生成
//map to xml
public static String converter(Map dataMap, String rootName)
{
    synchronized (MapToXMLString.class)  //同步锁,确保每次只有一个线程调用。
    {
        StringBuilder strBuilder = new StringBuilder();
        strBuilder.append("<"+rootName+">");
        strBuilder.append("\n");
        Set objSet = dataMap.keySet();
        for (Object key : objSet)
        {
            if (key == null)
            {
                continue;
            }
            strBuilder.append("<").append(key.toString()).append(">");
            Object value = dataMap.get(key);
            strBuilder.append(coverter(value));
            strBuilder.append("").append(key.toString()).append(">");
            strBuilder.append("\n");
        }
        strBuilder.append(""+rootName+">");
        return strBuilder.toString();
    }
}

import org.dom4j.Document;

//xml to map

public static Map parse(String text){
        SAXReader saxReader = new SAXReader();
        try {
            saxReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
            Document document = saxReader.read(new ByteArrayInputStream(text.getBytes()));
            Map map = Dom2Map(document);
            return map;
        } catch (DocumentException e) {
//            e.printStackTrace();
        } catch (SAXException e) {

        }
        return null;
    }

    /**
     * 将Document对象转为Map(String→Document→Map)
     * @param doc
     * @return
     */

    @SuppressWarnings("rawtypes")
    public static Map Dom2Map(Document doc){
        Map map = new HashMap();
        if(doc == null)
            return map;
        Element root = doc.getRootElement();
        for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
            Element e = (Element) iterator.next();
            //System.out.println(e.getName());
            List list = e.elements();
            if(list.size() > 0){
                map.put(e.getName(), Dom2Map(e));
            }else
                map.put(e.getName(), e.getText());
        }
        return map;
    }

    /**
     * 将Element对象转为Map(String→Document→Element→Map)
     * @param e
     * @return
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static Map Dom2Map(Element e){
        Map map = new HashMap();
        List list = e.elements();
        if(list.size() > 0){
            for (int i = 0;i < list.size(); i++) {
                Element iter = (Element) list.get(i);
                List mapList = new ArrayList();
                if(iter.elements().size() > 0){
                    Map m = Dom2Map(iter);
                    if(map.get(iter.getName()) != null){
                        Object obj = map.get(iter.getName());
                        if(!(obj  instanceof java.util.ArrayList)){
                            mapList = new ArrayList();
                            mapList.add(obj);
                            mapList.add(m);
                        }
                        if(obj  instanceof java.util.ArrayList){
                            mapList = (List) obj;
                            mapList.add(m);
                        }
                        map.put(iter.getName(), mapList);
                    }else
                        map.put(iter.getName(), m);
                }
                else{
                    if(map.get(iter.getName()) != null){
                        Object obj = map.get(iter.getName());
                        if(!(obj  instanceof java.util.ArrayList)){
                            mapList = new ArrayList();
                            mapList.add(obj);
                            mapList.add(iter.getText());
                        }
                        if(obj  instanceof java.util.ArrayList){
                            mapList = (List) obj;
                            mapList.add(iter.getText());
                        }
                        map.put(iter.getName(), mapList);
                    }else
                        map.put(iter.getName(), iter.getText());//公共map resultCode=0
                }
            }
        }else
            map.put(e.getName(), e.getText());
        return map;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炸炸炸炸炸鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值