Loading

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对象。

posted @ 2017-03-25 02:07  梦里凄惶  阅读(10130)  评论(0编辑  收藏  举报