JS操作xml對象轉換為Json對象


最近在處理一個前端功能的時候,遇到了一個問題,原本的系統是使用的xml來存儲數據的,而在新的系統上,想要轉換為json對象存儲,於是就考慮到直接將xml對象轉換為json對象。

目前為止,通用的轉換方式我還沒有找到,只有根據已知的xml對象結構來使用for循環不斷地賦值。

 1 var xml = ······;//獲取xml對象
 2 var objList = [];
 3 for(var i = 0;i<xml.childNodes.length;i++){
 4     var obj = {};
 5     obj.attribute1 = xml.getAttribute("attribute1");//獲取節點屬性
 6     obj.attribute2 = xml.getAttribute("attribute2");
 7     obj.children = [];
 8     for(var x=0;x<xml.childNodes[i].childNodes.length;x++){
 9         var element = xml.childNodes[i].childNodes[x];
10         var child = {};
11         child.attribute1 = element.getAttribute("attribute1");
12         child.attribute2 = element.getAttribute("attribute2");
13         obj.children.push(child);
14     }
15     objList.push(obj);          
16 }

for循環可以繼續嵌套下去,每一個新的json對象的屬性都可以自定義,但是在getAttribute()方法中一定要填寫自己所需要的存在的屬性。

這樣的方法看起來比較蠢,暫時先這樣用吧,等到我想到了更好的方法之后在考慮替換。

2017年3月26日補充:

 1 var xml;
 2 var jsonobj;
 3 function Xml2Json(xml,jsonobj) {
 4   for(var i = 0;i<xml.childNodes.length;i++){
 5     var nodes = xml.childNodes;
 6     jsonobj.name = xml.getAttribute("name");
 7     //屬性還是要根據實際情況設置
 8     jsonobj.children = [];
 9     for(var x = 0;x<nodes.length;x++){
10       jsonobj.children.push(nodes[x]);
11     }
12     if(nodes[i].hasChildNodes()){
13       Xml2Json(nodes[i],jsonobj.children[i]);
14     }
15   }
16 }

以上方法理論上可以處理無限層級的xml對象,但有一點很麻煩,就是沒有把節點的屬性也完整賦給json對象。


免責聲明!

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



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