本文实例讲述了js实现的xml对象转json功能。分享给大家供大家参考,具体如下:
支持无限级别xml结构对象转json,并且支持任意标签属性转json(兼容ie8等浏览器)"htmlcode">
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)"/") } 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互相转换工具:
http://tools.jb51.net/code/xmljson
在线格式化XML/在线压缩XML:
http://tools.jb51.net/code/xmlformat
XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress
XML代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat
更多关于JavaScript相关内容可查看本站专题:《JavaScript操作XML文件技巧总结》、《JavaScript中json操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年09月25日
2024年09月25日
- 纯音入心系列纯音乐《天籁古筝》1CD[MP3][331MB]
- 男女对唱典藏天碟《发烧对唱·那个季节里的歌DSD》10CD[WAV]
- 群星2010-歌林精选辑[歌林][WAV+CUE]
- TrioZimbalist-PianoTriosofWeinberg,Auerbach,Dvorak(2024)[24-44,1]wav
- 群星.1992-滚石第一流台湾歌·12王牌大车拼【滚石】【WAV+CUE】
- 林子祥.1984-创作歌集【华纳】【WAV+CUE】
- 周汤豪.2010-周汤豪【华纳】【FLAC分轨】
- Mozart-TheStringQuintets-AmadeusQuartet,CecilAronowitz(2017)[24-44,1][WAV+CUE]
- JamesWilliamsDennisIrwin-Focus(2024,Red)[24-48]FLAC
- 藤泽麻衣《空みあげて》[WAV]
- 纯音入心系列纯音乐《中国古筝经典名曲》1CD[MP3][1.3GB]
- 纯音入心系列纯音乐《古筝新奏:岁月静好与筝语,细水流年与筝同》1CD[MP3][846.9MB]
- 670《脆弱敏感小女生》[320K/MP3][27.53MB]
- 曾琳.2011-好好爱我【南方】【WAV+CUE】
- 范晓萱.1995-RAIN【福茂】【WAV+CUE】