js实现的xml对象转json功能示例
程序员文章站
2022-09-27 14:15:17
本文实例讲述了js实现的xml对象转json功能。分享给大家供大家参考,具体如下:
支持无限级别xml结构对象转json,并且支持任意标签属性转json(兼容ie8等浏览...
本文实例讲述了js实现的xml对象转json功能。分享给大家供大家参考,具体如下:
支持无限级别xml结构对象转json,并且支持任意标签属性转json(兼容ie8等浏览器)
xml字符串转xml对象:
function loadxml(str) { if (str == null) { return null; } var doc = str; try{ doc = createxmldom(); doc.async = false; doc.loadxml(str); }catch(e){ doc = $.parsexml(str); } return doc; }
/** *xml对象转json对象 *xmlobj:xml对象 *nodename:节点路径('root/item') *isarray:true,强制返回数组对象 **/ function xmltojson(xmlobj,nodename,isarray){ var obj=$(xmlobj); var itemobj={}; var nodenames=""; var getallattrs=function(node){//递归解析xml 转换成json对象 var _itemobj={}; var notnull=false; var nodechilds=node.childnodes; var childlenght=nodechilds.length; var _attrs=node.attributes; var firstnodename="#text"; try{ firstnodename=nodechilds[0].nodename; }catch(e){} if((childlenght>0&&firstnodename!="#text")||_attrs.length>0){ var _childs=nodechilds; var _childslength=nodechilds.length; var _filename_=""; if(undefined!=_attrs){ var _attrslength=_attrs.length; for(var i=0; i<_attrslength; i++){//解析xml节点属性 var attrname=_attrs[i].nodename; var attrvalue=_attrs[i].nodevalue; _itemobj[attrname]=attrvalue; } } for (var j = 0; j < _childslength; j++) {//解析xml子节点 var _node = _childs[j]; var _fildname = _node.nodename; if("#text"==_fildname){break;}; if(_itemobj[_fildname]!=undefined){//如果有重复的节点需要转为数组格式 if(!(_itemobj[_fildname] instanceof array)){ var a=_itemobj[_fildname]; _itemobj[_fildname]=[a];//如果该节点出现大于一个的情况 把第一个的值存放到数组中 } } var _fildvalue=getallattrs(_node); try{ _itemobj[_fildname].push(_fildvalue); }catch(e){ _itemobj[_fildname]=_fildvalue; _itemobj["length"]=1; } } }else{ _itemobj=(node.textcontent==undefined)?node.text:node.textcontent; } return _itemobj; }; if(nodename){ nodenames=nodename.split("/") } for(var i=0;i<nodenames.length;i++){ obj=obj.find(nodenames[i]); } $(obj).each(function(key,item){ if(itemobj[item.nodename]!=undefined){ if(!(itemobj[item.nodename] instanceof array)){ var a=itemobj[item.nodename]; itemobj[item.nodename]=[a]; } itemobj[item.nodename].push(getallattrs(item)); }else{ if(nodenames.length>0){ itemobj[item.nodename]=getallattrs(item); }else{ itemobj[item.firstchild.nodename]=getallattrs(item.firstchild); } } }); if(nodenames.length>1){ itemobj=itemobj[nodenames[nodenames.length-1]]; } if(isarray&&!(itemobj instanceof array)&&itemobj!=undefined){ itemobj=[itemobj]; } return itemobj; };
使用方法:
var xmlstr="<users>" + "<user state='0'>" + "<username type='string'>张三</username>" + "<userid type='string'>00001</userid>" + "</user>" + "<user state='1'>" + "<username type='string' size='100'>李四</username>" + "<userid>00002</userid>" + "</user>" + "<user>" + "<username>李四</username>" + "<userid>00002</userid>" + "</user>" + "</users>"; var xmlobj=loadxml(xmlstr);
参数设置:
(1) xmltojson(xmlobj);//返回结果如下
{ "users": { "user": [ { "state": "0", "username": { "type": "string" }, "length": 1, "userid": { "type": "string" } }, { "state": "1", "username": { "type": "string", "size": "100" }, "length": 1, "userid": "00002" }, { "username": "李四", "length": 1, "userid": "00002" } ], "length": 1 } }
(2)xmltojson(xmlobj,'users/user',true);返回结果如下:
[ { "state": "0", "username": { "type": "string" }, "length": 1, "userid": { "type": "string" } }, { "state": "1", "username": { "type": "string", "size": "100" }, "length": 1, "userid": "00002" }, { "username": "李四", "length": 1, "userid": "00002" } ]
ps:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线xml/json互相转换工具:
在线格式化xml/在线压缩xml:
xml在线压缩/格式化工具:
xml代码在线格式化美化工具:
更多关于javascript相关内容可查看本站专题:《javascript操作xml文件技巧总结》、《javascript中json操作技巧总结》、《javascript查找算法技巧总结》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结》
希望本文所述对大家javascript程序设计有所帮助。
下一篇: 新乡十大情调餐厅,新乡浪漫适合约会的饭店