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;
}
/**
*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)?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 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程序设计有所帮助。

(0)

相关推荐

  • C# XML与Json之间相互转换实例详解

    对于这转换其实很简单,其中最重要的就是先要引用类库.可以到官网进行下载引用http://json.codeplex.com. XML转换为Json字符串 复制代码 代码如下: string xml = @"<?xml version=""1.0"" standalone=""no""?>                             <root>                   

  • JQuery的ajax获取数据后的处理总结(html,xml,json)

    1.html处理比较简单,直接输出即可.一般用$("jb51div").innerHTML等即可 2.json格式数据调用 复制代码 代码如下: $.ajax({ url : "/trundle/RawContentAction.getAjaxContent.act", data : "param1=22", dataType : "json",//这里的dataType就是返回回来的数据格式了html,xml,json ca

  • json跟xml的对比分析

    ·可读性 JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负. ·可扩展性 XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的. ·编码难度 XML有丰富的编码工具,比如Dom4j.JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了. ·解码难度 XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为

  • JSON与XML优缺点对比分析

    1. 定义介绍 1.1 XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准. XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交换独立于应

  • JavaScript实现的XML与JSON互转功能详解

    本文实例讲述了JavaScript实现的XML与JSON互转功能.分享给大家供大家参考,具体如下: 这里来分享一个关于JavaScript实现XML与JSON互转例子,这里面介绍了国外的三款xml转json的例子,希望这些例子能给你带来帮助. 最近在开发在线XML编辑器,打算使用JSON做为中间格式.因为JSON相对于XML,有着容易阅读.解析速度快.占用空间小等优点,更易于在WEB上传递数据.但在实际使用中还是发现了一些易于忽略的细节,对于需要严格保证XML原始结构的情况,在转换成JSON时需

  • 对比分析json及XML

    随着移动互联网时代的大潮,越来越多的App不光是需要和网络服务器进行数据传输和交互,也需要和其他 App 进行数据传递.承担App与网络来进行传输和存储数据的一般是XML或者JSON.在移动互联网时代,XML和JSON很重要. 最近一段时间,个人综合了之前对XML.JSON的一些了解,参考了相关资料,再结合视频的代码,把自己的一些思考融入了这篇总结文档中,同时尝试用通俗诙谐的语言风格来阐述,期望能给感兴趣的读者带来帮助. 为了不和时代落伍,我们必须要学习 XML 和 JSON,但同时它们也很容易

  • xml转json的js代码

    复制代码 代码如下: function xmlToJson(xml) { // Create the return object var obj = {}; if (xml.nodeType == 1) { // element // do attributes if (xml.attributes.length > 0) { obj["@attributes"] = {}; for (var j = 0; j < xml.attributes.length; j++) {

  • JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例

    javascript版本的ajax发送请求 (1).创建XMLHttpRequest对象,这个对象就是ajax请求的核心,是ajax请求和响应的信息载体,单是不同浏览器创建方式不同 (2).请求路径 (3).使用open方法绑定发送请求 (4).使用send() 方法发送请求 (5).获取服务器返回的字符串   xmlhttpRequest.responseText; (6).获取服务端返回的值,以xml对象的形式存储  xmlhttpRequest.responseXML; (7).使用W3C

  • JQuery解析HTML、JSON和XML实例详解

    1.HTML 有的时候会将一段HTML片段保存在HTML文件中,在另外的主页面直接读取该HTML文件,然后解析里面的HTML代码片段融入到主页面中. fragment.html文件,其内容: 复制代码 代码如下: <div>hello Jquery</div> 在主页面 Test.html中解析代码 复制代码 代码如下: $("#a1").click(function(){     $("#div2").load('fragment.html

  • JavaScript将XML转成JSON的方法

    本文实例讲述了JavaScript将XML转成JSON的方法.分享给大家供大家参考.具体方法如下: 1. JavaScript代码如下: 复制代码 代码如下: // Changes XML to JSON function xmlToJson(xml) {     // Create the return object     var obj = {};     if (xml.nodeType == 1) { // element         // do attributes       

  • JSON与XML的区别对比及案例应用

    1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准. XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交换独立于应用

  • 如何在JS中实现相互转换XML和JSON

    开发中有时候会遇到XML和JSON相互转换,要求在JS中使用,网上找了好多,竟然每一个好用的,要么缺胳膊少腿,要么词不达意,太没天理了,果断自己实现一个. JSON与XML的区别比较 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类

随机推荐