js实现xml转json

<!DOCTYPE html>          
<html lang="en">          
<head>          
    <meta charset="UTF-8">          
    <title>js实现xml转json</title>        
    <style type="text/css">        
        html,body{width:100%;height:100%;margin:0;}         
    </style>        
</head>          
<body>         
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>        
<script type="text/javascript">    
// Converts XML to JSON    
// from: http://coursesweb.net/javascript/convert-xml-json-javascript_s2    
function XMLtoJSON() {    
  var me = this;      // stores the object instantce    
    
  // gets the content of an xml file and returns it in     
  me.fromFile = function(xml, rstr) {    
    // Cretes a instantce of XMLHttpRequest object    
    var xhttp = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");    
    // sets and sends the request for calling "xml"    
    xhttp.open("GET", xml ,false);    
    xhttp.send(null);    
    
    // gets the JSON string    
    var json_str = jsontoStr(setJsonObj(xhttp.responseXML));    
    
    // sets and returns the JSON object, if "rstr" undefined (not passed), else, returns JSON string    
    return (typeof(rstr) == 'undefined') ? JSON.parse(json_str) : json_str;    
  }    
    
  // returns XML DOM from string with xml content    
  me.fromStr = function(xml, rstr) {    
    // for non IE browsers    
    if(window.DOMParser) {    
      var getxml = new DOMParser();    
      var xmlDoc = getxml.parseFromString(xml,"text/xml");    
    }    
    else {    
      // for Internet Explorer    
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");    
      xmlDoc.async = "false";    
    }    
    
    // gets the JSON string    
    var json_str = jsontoStr(setJsonObj(xmlDoc));    
    
    // sets and returns the JSON object, if "rstr" undefined (not passed), else, returns JSON string    
    return (typeof(rstr) == 'undefined') ? JSON.parse(json_str) : json_str;    
  }    
    
  // receives XML DOM object, returns converted JSON object    
  var setJsonObj = function(xml) {    
    var js_obj = {};    
    if (xml.nodeType == 1) {    
      if (xml.attributes.length > 0) {    
        js_obj["@attributes"] = {};    
        for (var j = 0; j < xml.attributes.length; j++) {    
          var attribute = xml.attributes.item(j);    
          js_obj["@attributes"][attribute.nodeName] = attribute.value;    
        }    
      }    
    } else if (xml.nodeType == 3) {    
      js_obj = xml.nodeValue;    
    }                
    if (xml.hasChildNodes()) {    
      for (var i = 0; i < xml.childNodes.length; i++) {    
        var item = xml.childNodes.item(i);    
        var nodeName = item.nodeName;    
        if (typeof(js_obj[nodeName]) == "undefined") {    
          js_obj[nodeName] = setJsonObj(item);    
        } else {    
          if (typeof(js_obj[nodeName].push) == "undefined") {    
            var old = js_obj[nodeName];    
            js_obj[nodeName] = [];    
            js_obj[nodeName].push(old);    
          }    
          js_obj[nodeName].push(setJsonObj(item));    
        }    
      }    
    }    
    return js_obj;    
  }    
    
  // converts JSON object to string (human readablle).    
  // Removes '\t\r\n', rows with multiples '""', multiple empty rows, '  "",', and "  ",; replace empty [] with ""    
  var jsontoStr = function(js_obj) {
    var rejsn = JSON.stringify(js_obj, undefined, 2).
    replace(/(\\t|\\r|\\n)/g, '').replace(/"",[\n\t\r\s]+""[,]*/g, '').
    replace(/(\n[\t\s\r]*\n)/g, '').replace(/[\s\t]{2,}""[,]{0,1}/g, '').
    replace(/"[\s\t]{1,}"[,]{0,1}/g, '');
    return (rejsn.indexOf('"parsererror": {') == -1) ? rejsn : 'Invalid XML format';
  }  

  
};    
    
// creates object instantce of XMLtoJSON    
var xml2json = new XMLtoJSON();    
</script>    
    
<script type="text/javascript">      
    
var xmlstr = `<alexa ver="0.9" url="http://coursesweb.net/" home="0" aid="=">    
  <sd title="a" host="coursesweb.net">    
    <title>CoursesWeb: php, mysql, html, css, javascript, ajax, jquery, actionscript, flash</title>    
    <linksin num="1102"/>    
    <speed pct="51">4578</speed>    
  </sd>    
  <sd>    
    <popularity>5777</popularity>    
    <reach rank="5952"/>    
    <rank url="http://coursesweb.net/">6667</rank>    
  </sd>    
</alexa>`;    
    
// gets JSON object from a string with xml content    
var objson = xml2json.fromStr(xmlstr);    
console.log(objson);    
    
// gets JSON string from a string with xml content    
var strjson = xml2json.fromStr(xmlstr, 'string');    
console.log(strjson);    
</script>            
</body>          
</html>





猜你喜欢

转载自blog.csdn.net/xutongbao/article/details/79899558
今日推荐