Javascript JSON轉XML (change JSON to xml)

來源:互聯網
上載者:User

/**<br /> * Change JSON object to XML string.<br /> * The JSON object value must be a string,an array or object.<br /> * If the value is an integer or a float value,you must add " or ' to the value.<br /> * @author bitjjj<br /> * @param isPretty If format xml<br /> * @param separator Set line separator<br /> * @example var util = new JsonToXml(true); var result = util.toXml(JSONObject);<br /> * @return<br /> */<br />function JsonToXml(isPretty,separator){<br />this.result=[];<br />this.isPretty = !!isPretty;<br />this.separator = separator || "/r/n";</p><p>this.result.push("<?xml version=/"1.0/" encoding=/"utf-8/"?>");<br />if(this.isPretty){<br />//this.result.push(this.separator);<br />}<br />}</p><p>JsonToXml.prototype.spacialChars=["&","<",">","/"","'"];<br />JsonToXml.prototype.validChars:["&amp;","&lt;","&gt;","&quot;","&apos;"],</p><p>JsonToXml.prototype.toString = function(){<br />return this.result.join("");<br />};</p><p>JsonToXml.prototype.replaceSpecialChar = function(s){</p><p> for(var i=0;i<this.spacialChars.length;i++){<br /> s=s.replace(new RegExp(this.spacialChars[i],"g"),this.validChars[i]);<br /> }<br /> return s;<br />};</p><p>JsonToXml.prototype.appendText = function(s){<br /> s = this.replaceSpecialChar(s);<br /> this.result.push(s);<br />};</p><p>JsonToXml.prototype.appendFlagBegin = function(s){</p><p>this.result.push("<"+s+">");<br />};</p><p>JsonToXml.prototype.appendFlagEnd = function(s){<br />this.result.push("</"+s+">");<br />if(this.isPretty){<br />//this.result.push(this.separator);<br />}<br />};</p><p>JsonToXml.prototype.each = function(arr,cb){<br />for(var i=0;i<arr.length;i++){<br />cb(i,arr[i]);<br />}<br />};</p><p>/**<br /> * format xml string to pretty string<br /> * @param xml string<br /> * @return pretty xml string<br /> * @reference http://stackoverflow.com/questions/376373/pretty-printing-xml-with-javascript<br /> */<br />JsonToXml.prototype.formatXml = function (xml) {<br />var formatted = [];<br />var reg = /(>)(<)(//*)/g;<br />xml = xml.replace(reg, '$1'+this.separator+'$2$3');<br />var pad = 0,self = this;<br />this.each(xml.split(this.separator), function(index, node) {<br />var indent = 0;<br />if (node.match( /.+<///w[^>]*>$/ )) {<br />indent = 0;<br />}<br />else if (node.match( /^<///w/ )) {<br />if (pad != 0) {<br />pad -= 1;<br />}<br />}<br />else if (node.match( /^</w[^>]*[^//]>.*$/ )) {<br />indent = 1;<br />}<br />else {<br />indent = 0;<br />}<br />var padding = '';<br />for (var i = 0; i < pad; i++) {<br />padding += ' ';<br />}<br />formatted.push(padding + node + self.separator);<br />pad += indent;<br />});<br />return formatted.join("");<br />}; </p><p>JsonToXml.prototype.toXml = function(json){<br />this._toXml(json);</p><p>if(this.isPretty){<br />return this.formatXml(this.toString());<br />}<br />return this.toString();<br />};</p><p>JsonToXml.prototype._toXml = function(json){</p><p> for(var tag in json){<br /> //need to handle Array object specially<br /> if(json[tag].constructor==Array){<br /> for(var i=0;i<json[tag].length;i++){<br /> this.appendFlagBegin(tag);<br /> var item = json[tag][i];<br /> if(item.constructor == Object){<br /> this._toXml(item);<br /> }<br /> else if(item.constructor == Array){<br /> var obj={};<br /> obj[tag]=item;<br /> this._toXml(obj);<br /> }<br /> else if(item.constructor == String){<br /> this.appendText(item);<br /> }<br /> this.appendFlagEnd(tag);<br /> }<br /> }<br /> else{<br /> this.appendFlagBegin(tag);<br /> if(json[tag].constructor==Object){<br /> this._toXml(json[tag]);<br /> }<br /> else if(json[tag].constructor==String){<br /> this.appendText(json[tag]);<br /> }<br /> this.appendFlagEnd(tag);<br /> }<br /> }<br />};

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.