Java解析XML字符串

Java解析XML字符串

后端需要接收一段xml字符串并解析,xml标签有重复,涉及到解析过后不能用map存入,网上找了好多解析方式并不是我想要的(大部分都是用map存储),于是看着网上解析的思路,写了一套可以保存重复标签以及其他标签的方法。


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.plugin.activerecord.Record;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.*;

 /**
     * 解析xml文件  
     * @param xml
     * @param map
     * @param list
     * @return
     */
    public static List parseXml2Map(String xml, Map<String, String> map, List<String> list) {


        Map<String, String> mapEnd = new HashMap<String, String>();
        try {
            SAXReader reader = new SAXReader();
            Document doc = reader.read(new StringReader(xml));
            Element root = doc.getRootElement();
            String path = "";
            if (map.containsKey(root.getName().trim())) {
                path = map.get(root.getName().trim());
                map.remove(root.getName().trim());
            }
            for (Iterator i = root.elementIterator(); i.hasNext(); ) {

                Element element = (Element) i.next();
                if (element.isTextOnly()) {
                    if (path.length() > 0) {
                        String a = path + element.getName().trim();
                        if (a.contains("coordinates")) { //引号里面为重复的标签
                            list.add(element.getTextTrim());
                            // mapEnd.put(num+"", element.getTextTrim());
                        }
                        map.put(path + element.getName().trim(), element.getTextTrim());
                    } else {
                        String a = element.getName().trim();
                        if (a.contains("coordinates")) {//引号里面为重复的标签
                            list.add(element.getTextTrim());
                            //mapEnd.put(num+"", element.getTextTrim());
                        }
                        map.put(element.getName().trim(), element.getTextTrim());
                    }
                } else {
                    map.put(element.getName().trim(), path + element.getName().trim() + ".");
                    parseXml2Map(element.asXML(), map, list);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }//
        return list;
    }

PS:
参数里的Map和List 都是解析后存入的载体,重复标签存入List,不重复的标签存入Map,根据不同的需求来调整存入和返回


版权声明:本文为weixin_43290820原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。