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; } }
将key=value格式的字符串装换成xml
最新推荐文章于 2021-11-13 20:11:34 发布