zoukankan      html  css  js  c++  java
  • json to xml

    /*  This work is licensed under Creative Commons GNU LGPL License.
    
        License: http://creativecommons.org/licenses/LGPL/2.1/
       Version: 0.9
        Author:  Stefan Goessner/2006
        Web:     http://goessner.net/
    */
    function json2xml(o, tab) {
       var toXml = function(v, name, ind) {
          var xml = "";
          if (v instanceof Array) {
             for (var i=0, n=v.length; i<n; i++)
                xml += ind + toXml(v[i], name, ind+"	") + "
    ";
          }
          else if (typeof(v) == "object") {
             var hasChild = false;
             xml += ind + "<" + name;
             for (var m in v) {
                if (m.charAt(0) == "@")
                   xml += " " + m.substr(1) + "="" + v[m].toString() + """;
                else
                   hasChild = true;
             }
             xml += hasChild ? ">" : "/>";
             if (hasChild) {
                for (var m in v) {
                   if (m == "#text")
                      xml += v[m];
                   else if (m == "#cdata")
                      xml += "<![CDATA[" + v[m] + "]]>";
                   else if (m.charAt(0) != "@")
                      xml += toXml(v[m], m, ind+"	");
                }
                xml += (xml.charAt(xml.length-1)=="
    "?ind:"") + "</" + name + ">";
             }
          }
          else {
             xml += ind + "<" + name + ">" + v.toString() +  "</" + name + ">";
          }
          return xml;
       }, xml="";
       for (var m in o)
          xml += toXml(o[m], m, "");
       return tab ? xml.replace(/	/g, tab) : xml.replace(/	|
    /g, "");
    }

    jquery  xml  to json 

    /*
     ### jQuery XML to JSON Plugin v1.2 - 2013-02-18 ###
     * http://www.fyneworks.com/ - diego@fyneworks.com
        * Licensed under http://en.wikipedia.org/wiki/MIT_License
     ###
     Website: http://www.fyneworks.com/jquery/xml-to-json/
    *//*
     # INSPIRED BY: http://www.terracoder.com/
               AND: http://www.thomasfrank.se/xml_to_json.html
                                                AND: http://www.kawa.net/works/js/xml/objtree-e.html
    *//*
     This simple script converts XML (document of code) into a JSON object. It is the combination of 2
     'xml to json' great parsers (see below) which allows for both 'simple' and 'extended' parsing modes.
    */
    // Avoid collisions
    ;if(window.jQuery) (function($){
     
     // Add function to jQuery namespace
     $.extend({
      
      // converts xml documents and xml text to json object
      xml2json: function(xml, extended) {
       if(!xml) return {}; // quick fail
       
       //### PARSER LIBRARY
       // Core function
       function parseXML(node, simple){
        if(!node) return null;
        var txt = '', obj = null, att = null;
        var nt = node.nodeType, nn = jsVar(node.localName || node.nodeName);
        var nv = node.text || node.nodeValue || '';
        /*DBG*/ //if(window.console) console.log(['x2j',nn,nt,nv.length+' bytes']);
        if(node.childNodes){
         if(node.childNodes.length>0){
          /*DBG*/ //if(window.console) console.log(['x2j',nn,'CHILDREN',node.childNodes]);
          $.each(node.childNodes, function(n,cn){
           var cnt = cn.nodeType, cnn = jsVar(cn.localName || cn.nodeName);
           var cnv = cn.text || cn.nodeValue || '';
           /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>a',cnn,cnt,cnv]);
           if(cnt == 8){
            /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>b',cnn,'COMMENT (ignore)']);
            return; // ignore comment node
           }
           else if(cnt == 3 || cnt == 4 || !cnn){
            // ignore white-space in between tags
            if(cnv.match(/^s+$/)){
             /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>c',cnn,'WHITE-SPACE (ignore)']);
             return;
            };
            /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>d',cnn,'TEXT']);
            txt += cnv.replace(/^s+/,'').replace(/s+$/,'');
                                    // make sure we ditch trailing spaces from markup
           }
           else{
            /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>e',cnn,'OBJECT']);
            obj = obj || {};
            if(obj[cnn]){
             /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>f',cnn,'ARRAY']);
             
                                        // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child
                                        if(!obj[cnn].length) obj[cnn] = myArr(obj[cnn]);
                                        obj[cnn] = myArr(obj[cnn]);
             
                                        obj[cnn][ obj[cnn].length ] = parseXML(cn, true/* simple */);
             obj[cnn].length = obj[cnn].length;
            }
            else{
             /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>g',cnn,'dig deeper...']);
             obj[cnn] = parseXML(cn);
            };
           };
          });
         };//node.childNodes.length>0
        };//node.childNodes
        if(node.attributes){
         if(node.attributes.length>0){
          /*DBG*/ //if(window.console) console.log(['x2j',nn,'ATTRIBUTES',node.attributes])
          att = {}; obj = obj || {};
          $.each(node.attributes, function(a,at){
           var atn = jsVar(at.name), atv = at.value;
           att[atn] = atv;
           if(obj[atn]){
            /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'ARRAY']);
            
                                    // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child
                                    //if(!obj[atn].length) obj[atn] = myArr(obj[atn]);//[ obj[ atn ] ];
            obj[cnn] = myArr(obj[cnn]);
                                    
                                    obj[atn][ obj[atn].length ] = atv;
            obj[atn].length = obj[atn].length;
           }
           else{
            /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'TEXT']);
            obj[atn] = atv;
           };
          });
          //obj['attributes'] = att;
         };//node.attributes.length>0
        };//node.attributes
        if(obj){
         obj = $.extend( (txt!='' ? new String(txt) : {}),/* {text:txt},*/ obj || {}/*, att || {}*/);
         txt = (obj.text) ? (typeof(obj.text)=='object' ? obj.text : [obj.text || '']).concat([txt]) : txt;
         if(txt) obj.text = txt;
         txt = '';
        };
        var out = obj || txt;
        //console.log([extended, simple, out]);
        if(extended){
         if(txt) out = {};//new String(out);
         txt = out.text || txt || '';
         if(txt) out.text = txt;
         if(!simple) out = myArr(out);
        };
        return out;
       };// parseXML
       // Core Function End
       // Utility functions
       var jsVar = function(s){ return String(s || '').replace(/-/g,"_"); };
       
                // NEW isNum function: 01/09/2010
                // Thanks to Emile Grau, GigaTecnologies S.L., www.gigatransfer.com, www.mygigamail.com
                function isNum(s){
                    // based on utility function isNum from xml2json plugin (http://www.fyneworks.com/ - diego@fyneworks.com)
                    // few bugs corrected from original function :
                    // - syntax error : regexp.test(string) instead of string.test(reg)
                    // - regexp modified to accept  comma as decimal mark (latin syntax : 25,24 )
                    // - regexp modified to reject if no number before decimal mark  : ".7" is not accepted
                    // - string is "trimmed", allowing to accept space at the beginning and end of string
                    var regexp=/^((-)?([0-9]+)(([.\,]{0,1})([0-9]+))?$)/
                    return (typeof s == "number") || regexp.test(String((s && typeof s == "string") ? jQuery.trim(s) : ''));
                };
                // OLD isNum function: (for reference only)
                //var isNum = function(s){ return (typeof s == "number") || String((s && typeof s == "string") ? s : '').test(/^((-)?([0-9]*)((.{0,1})([0-9]+))?$)/); };
                                                                    
       var myArr = function(o){
        
                    // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child
                    //if(!o.length) o = [ o ]; o.length=o.length;
        if(!$.isArray(o)) o = [ o ]; o.length=o.length;
                    
                    // here is where you can attach additional functionality, such as searching and sorting...
        return o;
       };
       // Utility functions End
       //### PARSER LIBRARY END
       
       // Convert plain text to xml
       if(typeof xml=='string') xml = $.text2xml(xml);
       
       // Quick fail if not xml (or if this is a node)
       if(!xml.nodeType) return;
       if(xml.nodeType == 3 || xml.nodeType == 4) return xml.nodeValue;
       
       // Find xml root node
       var root = (xml.nodeType == 9) ? xml.documentElement : xml;
       
       // Convert xml to json
       var out = parseXML(root, true /* simple */);
       
       // Clean-up memory
       xml = null; root = null;
       
       // Send output
       return out;
      },
      
      // Convert text to XML DOM
      text2xml: function(str) {
       // NOTE: I'd like to use jQuery for this, but jQuery makes all tags uppercase
       //return $(xml)[0];
       var out;
       try{
        var xml = ((!$.support.opacity && !$.support.style))?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser();
        xml.async = false;
       }catch(e){ throw new Error("XML Parser could not be instantiated") };
       try{
        if((!$.support.opacity && !$.support.style)) out = (xml.loadXML(str))?xml:false;
        else out = xml.parseFromString(str, "text/xml");
       }catch(e){ throw new Error("Error parsing XML string") };
       return out;
      }
            
     }); // extend $
    
    })(jQuery);
  • 相关阅读:
    BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]
    BZOJ 1119: [POI2009]SLO [置换群]
    POJ 2154 Color [Polya 数论]
    POJ 2409 Let it Bead [置换群 Polya]
    POJ置换群入门[3/3]
    [置换群&Polya计数]【学习笔记】
    查看linux中的TCP连接数
    SIT测试 和 UAT测试
    原生app是什么意思?
    线程池原理
  • 原文地址:https://www.cnblogs.com/dhsz/p/7363987.html
Copyright © 2011-2022 走看看