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相关推荐

  1. XML转JSON的javascript代码

    为什么80%的码农都做不了架构师?>>>    下面是神奇的XML转JSON的javascript代码: // Changes XML to JSON function xmlToJ ...

  2. XML和JSON数据格式对比

    概念 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...

  3. XML和JSON 数据交换格式

    为什么80%的码农都做不了架构师?>>>    一.什么是数据交换格式? 客户端与服务器常用数据交换格式xml.json.html 二.数据交换格式应用场景 移动端(安卓.IOS)通 ...

  4. 【科普】:10分钟看明白XML和JSON

    引言 NOKIA 有句著名的广告语:"科技以人为本".任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个 ...

  5. 实测:xml与json速度约差4倍

    xml与json在javascript中解析并使用,速度大约相差4倍.(在IE中测试的结果). 其中主要不在于eval,与xml parse的时间差别,主要在于属性访问上的差别: xml中使用这样的方 ...

  6. XML和JSON两种数据交换格式的比较

    目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...

  7. Json学习总结(1)——Java和JavaScript中使用Json方法大全

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript ...

  8. 于数据交换格式XML和JSON的比较

    目前,在web开发领域,主要的数据传输格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生:相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你之 ...

  9. JavaScript对象、JSON对象、JSON字符串的区别

    一.首先看下什么是JSON JSON:JavaScript Object Natation,JavaScript对象的表现形式,已经发展成一种轻量级的数据交换格式. JavaScript对象的表现形式 ...

最新文章

  1. Coursera Machine Learning 作业提交问题
  2. Gym - 101480K_K - Kernel Knights (DFS)
  3. springboot 接口返回数据时 net.sf.json.JSONNull[“empty“]) 异常
  4. js插件---WebUploader 如何接收服务端返回的数据
  5. save()、saveOrUpdate()、merge()的区别
  6. oracle 10g 报错:ORA-00257: archiver error. Connect internal only, until freed
  7. 南开大学c语言试题,南开大学二级C语言试题库,共71页
  8. C++ 封装DLL遇到的一些坑爹问题与解决方案
  9. Go圈10月份优质博主推荐
  10. 论文编辑之目录和正文页码不同的设置
  11. Velocity教程【转】
  12. spring 全依赖
  13. 【App设计】互联网+商业计划书
  14. Android安卓开发-Helloworld
  15. Windows 7和Windows10 修改文件、文本文档后缀时不显示后缀名真么办?
  16. 寒假训练1—H(第一次写出结构体数组)
  17. 高等代数 具有度量的线性空间(第10章)4 酉空间,酉变换,埃尔米特变换,正规变换
  18. linux中i的英文单词,Linux下gcc/g++中-I(i的大写)、-L和-l
  19. 用计算机唱歌弹奏china,新目标英语专题练习:句型转换(附答案)
  20. 读书笔记005:南怀瑾:如何做到精神内敛?

热门文章

  1. linux so文件支持系统,让linux支持xfs jfs reiserfs 文件系统
  2. 300plc与组态王mpi通讯_MPI(DP)-ETH以太网转换器使用手册
  3. C语言 gcc 动态库
  4. opencv-api pyrDown
  5. d3 v4 api transitions
  6. 成员变量和方法的理解
  7. Pandas Index对象
  8. 学习Linux编程前的准备
  9. 指针 | golang之指针的学习
  10. html按照字数分页,纯javascript实现分页(两种方法)