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請求封裝中進行具體操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM