javascript xml转json
1、代码
//加载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对象的数据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 dataStr = '<userList><user name="aa" age="32"></user><user name="bb" age="33"></user><user name="cc" age="34"><child name="cc-1" age="3"></child></user></userList>'var xmlObj = loadXml(dataStr);var jsonData = xmlTojson(xmlObj, 'userList/user', true);console.log(jsonData)
2、测试结果
转载于:https://www.cnblogs.com/libo0125ok/p/10870195.html
javascript xml转json相关推荐
- XML转JSON的javascript代码
为什么80%的码农都做不了架构师?>>> 下面是神奇的XML转JSON的javascript代码: // Changes XML to JSON function xmlToJ ...
- XML和JSON数据格式对比
概念 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...
- XML和JSON 数据交换格式
为什么80%的码农都做不了架构师?>>> 一.什么是数据交换格式? 客户端与服务器常用数据交换格式xml.json.html 二.数据交换格式应用场景 移动端(安卓.IOS)通 ...
- 【科普】:10分钟看明白XML和JSON
引言 NOKIA 有句著名的广告语:"科技以人为本".任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个 ...
- 实测:xml与json速度约差4倍
xml与json在javascript中解析并使用,速度大约相差4倍.(在IE中测试的结果). 其中主要不在于eval,与xml parse的时间差别,主要在于属性访问上的差别: xml中使用这样的方 ...
- XML和JSON两种数据交换格式的比较
目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...
- Json学习总结(1)——Java和JavaScript中使用Json方法大全
2019独角兽企业重金招聘Python工程师标准>>> 摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript ...
- 于数据交换格式XML和JSON的比较
目前,在web开发领域,主要的数据传输格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生:相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你之 ...
- JavaScript对象、JSON对象、JSON字符串的区别
一.首先看下什么是JSON JSON:JavaScript Object Natation,JavaScript对象的表现形式,已经发展成一种轻量级的数据交换格式. JavaScript对象的表现形式 ...
最新文章
- Coursera Machine Learning 作业提交问题
- Gym - 101480K_K - Kernel Knights (DFS)
- springboot 接口返回数据时 net.sf.json.JSONNull[“empty“]) 异常
- js插件---WebUploader 如何接收服务端返回的数据
- save()、saveOrUpdate()、merge()的区别
- oracle 10g 报错:ORA-00257: archiver error. Connect internal only, until freed
- 南开大学c语言试题,南开大学二级C语言试题库,共71页
- C++ 封装DLL遇到的一些坑爹问题与解决方案
- Go圈10月份优质博主推荐
- 论文编辑之目录和正文页码不同的设置
- Velocity教程【转】
- spring 全依赖
- 【App设计】互联网+商业计划书
- Android安卓开发-Helloworld
- Windows 7和Windows10 修改文件、文本文档后缀时不显示后缀名真么办?
- 寒假训练1—H(第一次写出结构体数组)
- 高等代数 具有度量的线性空间(第10章)4 酉空间,酉变换,埃尔米特变换,正规变换
- linux中i的英文单词,Linux下gcc/g++中-I(i的大写)、-L和-l
- 用计算机唱歌弹奏china,新目标英语专题练习:句型转换(附答案)
- 读书笔记005:南怀瑾:如何做到精神内敛?