栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA 解析xml的工具类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA 解析xml的工具类

package com.xml.util;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.jdom2.document;
import org.jdom2.Element;
import org.jdom2.Namespace;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.xml.sax.InputSource;



public class ParseXmlUtil {
    public static Logger     logger     = Logger.getLogger(ParseXmlUtil.class);
   
    public static String xml2Json(String responseXmlTemp, JSonObject node, String currentNode, String listcurrentNode) throws JDOMException, IOException
         {
        
        InputSource source = new InputSource(new StringReader(responseXmlTemp.trim()));
        SAXBuilder builder = new SAXBuilder();
        document doc = null;
            doc = builder.build(source);
        Element rootElement = doc.getRootElement();
        Map mapXml = new TreeMap();
        element2Map(mapXml, rootElement, node, currentNode, listcurrentNode);
        String jsonXml = JSONObject.fromObject(mapXml).toString();
        System.out.println("Json >>> " + jsonXml);
        return jsonXml;
    }

   
    public static String xml2Json(String responseXmlTemp) throws JDOMException, IOException {
        document doc = null;
        InputSource source = new InputSource(new StringReader(responseXmlTemp.trim()));
        SAXBuilder builder = new SAXBuilder();
            doc = builder.build(source);
        Element rootElement = doc.getRootElement();
        Map mapXml = new TreeMap();
        element2Map(mapXml, rootElement);
        String jsonXml = JSONObject.fromObject(mapXml).toString();
        System.out.println("Json >>> " + jsonXml);
        return jsonXml;
    }

   
    public static Map xml2map(String responseXmlTemp, JSonObject node, String currentNode,
        String listCurrentNode) throws JDOMException, IOException {
        document doc = null;
        InputSource source = new InputSource(new StringReader(responseXmlTemp.trim()));
        SAXBuilder builder = new SAXBuilder();
            doc = builder.build(source);
        Element rootElement = doc.getRootElement();
        Map mapXml = new TreeMap();
        element2Map(mapXml, rootElement, node, currentNode, listCurrentNode);
        return mapXml;
    }

    public static Map xml2map(String responseXmlTemp) throws JDOMException, IOException {
        document doc = null;
        InputSource source = new InputSource(new StringReader(responseXmlTemp.trim()));
        SAXBuilder builder = new SAXBuilder();
            doc = builder.build(source);
        Element rootElement = doc.getRootElement();
        Map mapXml = new TreeMap();
        element2Map(mapXml, rootElement);
        return mapXml;
    }

   
    @SuppressWarnings( {"unchecked", "rawtypes"})
    public static void element2Map(Map map, Element rootElement, JSonObject node, String currentNode,
        String listcurrentNode) {
        // 获得当前节点的子节点
        List elements = rootElement.getChildren();
        int elementsSize = elements.size();
        if (elementsSize == 0) {
            // 没有子节点说明当前节点是叶子节点,直接取值
            if (node.getJSonObject(currentNode) != null) {
                if (node.getJSonObject(currentNode).keySet().toString().contains(rootElement.getName())) {
                    map.put(rootElement.getName(), rootElement.getText());
                }
            }
        } else if (elementsSize == 1 && !elements.get(0).getName().equals(listcurrentNode) ) {
            // 只有一个子节点说明不用考虑list的情况,继续递归
            Map tempMap = new TreeMap();
            if (node.getJSonObject(currentNode) != null) {
                element2Map(tempMap, elements.get(0), node.getJSonObject(currentNode), elements.get(0).getName(),
                    listcurrentNode);
                if (node.getJSonObject(currentNode).keySet().contains(elements.get(0).getName())) {
                    map.put(elements.get(0).getName(), tempMap);
                }
            }

        } else {
            // 多个子节点的话就要考虑list的情况了,特别是当多个子节点有名称相同的字段时
            Map tempMap = new TreeMap();
            for (Element element : elements) {
                tempMap.put(element.getName(), null);
            }
            Set keySet = tempMap.keySet();
            for (String string : keySet) {
                Namespace namespace = elements.get(0).getNamespace();
                List sameElements = rootElement.getChildren(string);
                // 如果同名的数目大于1则表示要构建list
                int sameElementSize = sameElements.size();
                if (sameElementSize > 1) {
                    List list = new ArrayList();
                    for (Element element : sameElements) {
                        Map sameTempMap = new TreeMap();
                        if (node.getJSonObject(currentNode).keySet().toString().contains(string)) {
                            if (node.getJSonObject(currentNode) != null) {
                                element2Map(sameTempMap, element, node.getJSonObject(currentNode), string,
                                    listcurrentNode);
                                list.add(sameTempMap);
                            }
                        }
                    }

                    if (node.getJSonObject(currentNode).keySet().toString().contains(string)) {
                        if (node.getJSonObject(currentNode) != null) {
                            map.put(string, list);
                        }
                    }
                } else {
                    // 同名的数量不大于1直接递归
                    if (listcurrentNode != null) {
                        String[] strarr = listcurrentNode.split(",");
                        for (int i = 0; i < strarr.length; i++) {
                            if (strarr[i].equals(string)) {
                                List list = new ArrayList();
                                for (Element element : sameElements) {
                                    Map sameTempMap = new TreeMap();
                                    if (node.getJSonObject(currentNode).keySet().toString().contains(string)) {
                                        if (node.getJSonObject(currentNode) != null) {
                                            element2Map(sameTempMap, element, node.getJSonObject(currentNode), string,
                                                listcurrentNode);
                                            list.add(sameTempMap);
                                        }
                                    }
                                }
                                if (node.getJSonObject(currentNode).keySet().toString().contains(string)) {
                                    if (node.getJSonObject(currentNode) != null) {
                                        map.put(string, list);
                                    }
                                }
                            } else {
                                Map sameTempMap = new TreeMap();
                                if (node.getJSonObject(currentNode).keySet().toString().contains(string)) {
                                    if (node.getJSonObject(currentNode) != null) {
                                        element2Map(sameTempMap, sameElements.get(0), node.getJSonObject(currentNode),
                                            string, listcurrentNode);
                                        map.put(string, sameTempMap);
                                    }
                                }
                            }
                        }
                    } else {
                        Map sameTempMap = new TreeMap();
                        if (node.getJSonObject(currentNode).keySet().toString().contains(string)) {
                            if (node.getJSonObject(currentNode) != null) {
                                element2Map(sameTempMap, sameElements.get(0), node.getJSonObject(currentNode), string,
                                    listcurrentNode);
                                map.put(string, sameTempMap);
                            }
                        }
                    }
                }

            }
        }
    }

    public static void element2Map(Map map, Element rootElement) {
        // 获得当前节点的子节点
        List elements = rootElement.getChildren();
        int elementsSize = elements.size();
        if (elementsSize == 0) {
            // 没有子节点说明当前节点是叶子节点,直接取值
            // if(node.getJSonObject(currentNode).keySet().toString().contains(rootElement.getName())) {
            map.put(rootElement.getName(), rootElement.getText());
            // }
        } else if (elementsSize == 1) {
            // 只有一个子节点说明不用考虑list的情况,继续递归
            Map tempMap = new TreeMap();
            element2Map(tempMap, elements.get(0));
            // if(node.getJSonObject(currentNode).keySet().contains(elements.get(0).getName())) {
            map.put(elements.get(0).getName(), tempMap);
            // }
        } else {
            // 多个子节点的话就要考虑list的情况了,特别是当多个子节点有名称相同的字段时
            Map tempMap = new TreeMap();
            for (Element element : elements) {
                tempMap.put(element.getName(), null);

            }
            Set keySet = tempMap.keySet();
            for (String string : keySet) {
                Namespace namespace = elements.get(0).getNamespace();
                List sameElements = rootElement.getChildren(string);
                // 如果同名的数目大于1则表示要构建list
                int sameElementSize = sameElements.size();
                if (sameElementSize > 1) {
                    List list = new ArrayList();
                    for (Element element : sameElements) {
                        Map sameTempMap = new TreeMap();
                        element2Map(sameTempMap, element);
                        list.add(sameTempMap);
                    }
                    map.put(string, list);
                } else {
                    // 同名的数量不大于1直接递归
                    Map sameTempMap = new TreeMap();
                    element2Map(sameTempMap, sameElements.get(0));
                    map.put(string, sameTempMap);
                }
            }
        }

    }

    @SuppressWarnings("unchecked")
    public static void parseData(Map map,JSonObject jsonObject) {
        if (map.size() == 1) {
            for (Object key : map.keySet()) {
                Object value = map.get(key);
                if (value.toString().startsWith("[") && value.toString().endsWith("]")) {
                    jsonObject.put(key, value);
                    // List list = (List)value;
                    // Iterator iterator = list.iterator();
                    // while(iterator.hasNext()){
                    // value = iterator.next();
                    // parseData((Map)value);
                    // }
                    // System.out.println(key+"  "+value);
                } else if (!value.toString().startsWith("{") && !value.toString().endsWith("}")) {
                    if (jsonObject.get(key) != null) {
                        if (!jsonObject.get(key).toString().startsWith("[")
                            && !jsonObject.get(key).toString().endsWith("]")) {
                            jsonObject.put(key, "" + jsonObject.getString((String)key).toString() + "|"
                                + (value).toString() + "");
                        } else {
                            jsonObject.put(key, """ + jsonObject.getJSonArray((String)key).toString() + "|"
                                + JSONArray.fromObject(value).toString() + """);
                        }
                    } else {
                        jsonObject.put(key, value);
                    }
                } else {
                    parseData((Map)value,jsonObject);
                }
            }
        } else {
            for (Object key : map.keySet()) {
                Object value = map.get(key); 
                    if (value.toString().startsWith("[") && value.toString().endsWith("]")) {
               
                        // List list = (List)value;
                        // for(int i = 0;i < list.size();i++)
                        // {
                        // Map map1 = (Map) list.get(i);
                        // parseData(map1);
                        // }
                        if (jsonObject.get(key) != null) {
                            jsonObject.put(key, """ + jsonObject.getJSonArray((String)key).toString() + "|"
                                + JSONArray.fromObject(value).toString() + """);
                        } else {
                            jsonObject.put(key, value);
                        }
                    } else {
                        if (value.toString().startsWith("{") && value.toString().endsWith("}")) {
                        parseData((Map)value,jsonObject);
                        }
                    }
                }
            }
        }
    }

 // 获取一个xml文件
                            String textFromFile = MyXmlUtil.XmlToString("");

//currentNode    XML最大的那个key                               

//listcurrentNode  在xml中多个循环的数据

//两个相同的XML key值得value 会按|分割最里面数据得在最第一个,按此规则排列排列1|1|1|1

//调用 将xml解析为Map
                            Map resultMap =
                                ParseXmlUtil.xml2map(textFromFile, nodejson, currentNode, listcurrentNode);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356641.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号