javascript實作xml字元串轉換json格式資料
前言:
公司一個老項目重構,後端傳回資料為xml格式。
而現有的前後端分離開發中,後端大部分傳回的都是json格式的資料給到前端,是以前端也是直接對後端傳回的json資料進行解析。
是以就需要對老接口傳回的xml資料進行轉換了,看了下老項目中對xml資料解析的相關代碼,有1700+行,可謂是比較恐怖了,是以決定直接将xml字元串轉換成json格式,以适應現有架構。
解決方案:
在接口請求封裝函數中對接口傳回資料進行格式轉換操作,頁面的開發不受任何影響。
關鍵代碼:
1 /**
2 * xml字元串轉換xml對象資料
3 * @param {Object} xmlStr
4 */
5 function xmlStr2XmlObj(xmlStr) {
6 var xmlObj = {};
7 if (document.all) {
8 var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
9 xmlDom.loadXML(xmlStr);
10 xmlObj = xmlDom;
11 } else {
12 xmlObj = new DOMParser().parseFromString(xmlStr, "text/xml");
13 }
14 return xmlObj;
15 }
16
17 /**
18 * xml字元串轉換json資料
19 * @param {Object} xml
20 */
21 function xmlObj2json(xml) {
22 var xmlObj = xmlStr2XmlObj(xml);
23 var jsonObj = {};
24 if (xmlObj.childNodes.length > 0) {
25 jsonObj = xml2json(xmlObj);
26 }
27 return jsonObj;
28 }
29
30 /**
31 * xml轉換json資料
32 * @param {Object} xml
33 */
34 function xml2json(xml) {
35 try {
36 var obj = {};
37 if (xml.children.length > 0) {
38 for (var i = 0; i < xml.children.length; i++) {
39 var item = xml.children.item(i);
40 var nodeName = item.nodeName;
41 if (typeof(obj[nodeName]) == "undefined") {
42 obj[nodeName] = xml2json(item);
43 } else {
44 if (typeof(obj[nodeName].push) == "undefined") {
45 var old = obj[nodeName];
46 obj[nodeName] = [];
47 obj[nodeName].push(old);
48 }
49 obj[nodeName].push(xml2json(item));
50 }
51 }
52 } else {
53 obj = xml.textContent;
54 }
55 return obj;
56 } catch (e) {
57 console.log(e.message);
58 }
59 }
以上代碼即實作了xml字元串到json格式資料的轉換,後邊會繼續寫問講解如何在axios請求封裝中進行具體操作。