将key=value格式的字符串装换成xml

package com.self.test;

import jdk.internal.org.xml.sax.InputSource;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.StringReader;
import java.util.*;

public class StringToXml {
    public static void main(String[] args) {
        String source = "SYS_HEAD.EMBRANCH_ID=&SYS_HEAD.TRAN_TIMESTAMP=041540%3E&SYS_HEAD.USER_ID=moop001&SYS_HEAD.BRANCH_ID=&SYS_HEAD.BUSS_SEQ_NO=20180522" +
                "041540%3E&SYS_HEAD.TRAN_DATE=20180522%3E&SYS_HEAD.SUB_BRANCH_ID=&SYS_HEAD.ORG_SYS_ID=10203&SYS_HEAD.TRAN_MODE=&SYS_HEAD.SOURCE_TYPE=10203&SYS_HEA" +
                "D.CONSUMER_SEQ_NO=201805220415402018052200%3E&SYS_HEAD.TRAN_FLAG=0&SYS_HEAD.SERVICE_SCENE=01&SYS_HEAD.SERVICE_CODE=3001000010&SYS_HEAD.CONSUMER_I" +
                "D=060700&BODY.MERCHANT_ID=&BODY.TRADE_NO=05180004120706&BODY.ACC_NO=6235213288010044550&BODY.CHECK_PWD=Y&BODY.ACC_PWD=111111&BODY.REC_ACC_NM=%3F%" +
                "3F%3F%3F%3F%3F%3F%3F&BODY.REC_ACC_NO=1234567&BODY.SC_DFC_FLAG=0&BODY.CONSUMER_INFO=e2lkVHlwZTonMDEnLGlkTm86JzEyMzQ1NjcnLGN1c05tOidkb2dlJyxtYmxObz" +
                "onMTg3MTIzODI4ODgnfQ%3D%3D&TEMP_HEAD.TRAN_TIMESTAMP=041540%3E";
        getWhat(source);
    }

    public static void getWhat(String source) {
        System.out.println(source);
        System.out.println();
        //先获取到大结点
        String[] heads = getHeads(source);
        Map<String,Map<String,String>>  tempMap = new HashMap<>();
        for (int headIndex = 0;headIndex<heads.length;headIndex++){
            System.out.println("headIndex-->"+heads[headIndex]);
            String mapName = heads[headIndex];
            tempMap.put(mapName,new HashMap<>());
        }
        //根据&将所有字段分开
        String[] sourceDetails = source.split("&");
        for (int i = 0; i < sourceDetails.length; i++) {
            System.out.println(sourceDetails[i]);
            //根据=将键值对分离
            if (sourceDetails[i].contains("=")) {
                String sourceDetailKey = sourceDetails[i].split("=")[0].trim();
                String sourceDetailValue = sourceDetails[i].split("=").length == 2 ? sourceDetails[i].split("=")[1].trim() : "";
                System.out.println(sourceDetailKey + "  " + sourceDetailValue);
                for (int headIndex = 0;headIndex<heads.length;headIndex++){
                    System.out.println(heads[headIndex]+".");
                    if (sourceDetailKey.contains(heads[headIndex]+".")) {
                        tempMap.get(heads[headIndex]).put(sourceDetailKey.split(heads[headIndex]+"\\.")[1], sourceDetailValue);
                    }
                }
            } else {
                System.out.println("是不是缺了个 ‘=’ ?");
            }
        }
        StringBuilder result = new StringBuilder();
        result.append("<service>\n");
        for (String key : tempMap.keySet()) {
            result.append("<").append(key).append(">\n");
            for (Map.Entry<String, String> entry : tempMap.get(key).entrySet()) {
                result.append("<");
                result.append(entry.getKey());
                result.append(" attr=\"field\">");
                result.append(entry.getValue());
                result.append("</");
                result.append(entry.getKey());
                result.append(">\n");
            }
            result.append("</").append(key).append(">\n");
        }
        result.append("</service>\n");
        System.out.println("-----------------------------");
        System.out.println(result);
        System.out.println("-----------------------------");

        System.out.println();
    }

    private static Map<String, String[]> getKeysAndValues(String source) {
        Map<String, String[]> result = new HashMap<>();
        String[] sourceDetails = source.split("&");
        String[] keys = new String[sourceDetails.length];
        String[] values = new String[sourceDetails.length];
        for (int i = 0; i < sourceDetails.length; i++) {
            if (sourceDetails[i].contains("=")) {
                String sourceDetailKey = sourceDetails[i].split("=")[0].trim();
                String sourceDetailValue = sourceDetails[i].split("=").length == 2 ? sourceDetails[i].split("=")[1].trim() : "";
                keys[i] = sourceDetailKey;
                values[i] = sourceDetailValue;
            }
        }
        result.put("keys", keys);
        result.put("values", values);
        return result;
    }

    private static  String[] getHeads(String source) {
        Map<String, String[]> tempMap = getKeysAndValues(source);
        String[] keys = tempMap.get("keys");
        Set<String> headSet = new HashSet<>();
        for (int i = 0; i < keys.length; i++) {
            //根据.将每个key的头取出来,并且根据set特性去重
            String[] heads = keys[i].split("\\.");
            headSet.add(heads[0]);
        }
        Iterator<String> iterator = headSet.iterator();
        String[] result = new String[headSet.size()];
        int count = 0;
        while (iterator.hasNext()) {
            result[count] = iterator.next();
            count++;
        }
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34756209/article/details/80412261