DDR爱好者之家 Design By 杰米
本文实例讲述了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程序设计有所帮助。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月29日
2024年11月29日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]