栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

js实现的xml对象转json功能示例

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

js实现的xml对象转json功能示例

本文实例讲述了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;
}


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;i0){
  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="" +
 "" +
 "张三" +
 "00001" +
 "" +
 "" +
 "李四" +
 "00002" +
 "" +
 "" +
 "李四" +
 "00002" +
 "" +
 "";
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程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/91540.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号