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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JS中实现相互转换XML和JSON相关的知识,希望对你有一定的参考价值。

javascript中实现XML和JSON相互转换

先看调用例子:

复制代码 代码如下:

<viewport id="menuPane" layout="border">
<panel region="center" border="0" layout="border">
<tbar>
<toolbar text="XXXX">
<menu>
<text text="11">
</text>
<text text="22">
</text>
<text text="33">
</text>
</menu>
</toolbar>
<toolbar text="XXXX">
<menu>
<text text="44">
</text>
<text text="55">
</text>
<menu>
<text text="6 6">
</text>
</menu>
<text text="77">
</text>
</menu>
</toolbar>
</tbar>
</panel>
</viewport>
var xmlParser = new XmlToJson();
var json = xmlParser.parse(xml);
console.log( JSON.stringify(json) );
var jsonParser = new JsonToXml();
var xml = jsonParser.parse(json);
console.log( xml );

XML转换为JSON:

复制代码 代码如下:

function XmlToJson()

XmlToJson.prototype.setXml = function(xml)
if(xml && typeof xml == "string")
this.xml = document.createElement("div");
this.xml.innerhtml = xml;
this.xml = this.xml.getElementsByTagName("*")[0];

else if(typeof xml == "object")
this.xml = xml;

;
XmlToJson.prototype.getXml = function()
return this.xml;
;
XmlToJson.prototype.parse = function(xml)
this.setXml(xml);
return this.convert(this.xml);
;
XmlToJson.prototype.convert = function(xml)
if (xml.nodeType != 1)
return null;

var obj = ;
obj.xtype = xml.nodeName.toLowerCase();
var nodeValue = (xml.textContent || "").replace(/(\r|\n)/g, "").replace(/^\s+|\s+$/g, "");

if(nodeValue && xml.childNodes.length == 1)
obj.text = nodeValue;

if (xml.attributes.length > 0)
for (var j = 0; j < xml.attributes.length; j++)
var attribute = xml.attributes.item(j);
obj[attribute.nodeName] = attribute.nodeValue;


if (xml.childNodes.length > 0)
var items = [];
for(var i = 0; i < xml.childNodes.length; i++)
var node = xml.childNodes.item(i);
var item = this.convert(node);
if(item)
items.push(item);


if(items.length > 0)
obj.items = items;


return obj;
;

JSON转换为XML:

复制代码 代码如下:

function JsonToXml()
this.result = [];

JsonToXml.prototype.spacialChars = ["&","<",">","\"","'"];
JsonToXml.prototype.validChars = ["&","<",">",""","'"];
JsonToXml.prototype.toString = function()
return this.result.join("");
;
JsonToXml.prototype.replaceSpecialChar = function(s)
for(var i=0;i<this.spacialChars.length;i++)
s=s.replace(new RegExp(this.spacialChars[i],"g"),this.validChars[i]);

return s;
;
JsonToXml.prototype.appendText = function(s)
s = this.replaceSpecialChar(s);
this.result.push(s);
;
JsonToXml.prototype.appendAttr = function(key, value)
this.result.push(" "+ key +"=\""+ value +"\"");
;
JsonToXml.prototype.appendFlagBeginS = function(s)
this.result.push("<"+s);
;
JsonToXml.prototype.appendFlagBeginE = function()
this.result.push(">");
;
JsonToXml.prototype.appendFlagEnd = function(s)
this.result.push("</"+s+">");
;
JsonToXml.prototype.parse = function(json)
this.convert(json);
return this.toString();
;
JsonToXml.prototype.convert = function(obj)
var nodeName = obj.xtype || "item";
this.appendFlagBeginS(nodeName);
var arrayMap = ;
for(var key in obj)
var item = obj[key];
if(key == "xtype")
continue;

if(item.constructor == String)
this.appendAttr(key, item);

if(item.constructor == Array)
arrayMap[key] = item;


this.appendFlagBeginE();
for(var key in arrayMap)
var items = arrayMap[key];
for(var i=0;i<items.length;i++)
this.convert(items[i]);


this.appendFlagEnd(nodeName);
;
参考技术A JSON与XML的区别比较

1.定义介绍

(1).XML定义

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

(2).JSON定义

JSON(JavaScript Object
Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C,
C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。
JSON基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。

2.XML和JSON优缺点

(1).XML的优缺点

<1>.XML的优点
A.格式统一,符合标准;
B.容易与其他系统进行远程交互,数据共享比较方便。

<2>.XML的缺点
A.XML文件庞大,文件格式复杂,传输占带宽;
B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
D.服务器端和客户端解析XML花费较多的资源和时间。

Swift中实现Array数组和NSArray数组的相互转换与遍历

      Array是Swift中的数组数据类型。而NSArray是OC中的数组数据类型。两者有差别有联系。在Swift中有时候难免会使用到OC中的一些东西。今天我们就来Swift中使用NSArray和Array,而且进行转化。

(1)声明一个Array数组。并进行遍历。代码例如以下:

    let stringArray: Array<String> = ["10", "20","30","40","50"]
        for index in stringArray{
        
            println(index)
        }
        

输出结果例如以下:

技术分享

使用Swift遍历Array数组没有不论什么问题,能够使用for...in循环。


(2)声明一个NSArray数组,并进行遍历,代码例如以下:

     let stringNSArray: NSArray = ["10", "20","30","40","50"]
        
        for index in stringNSArray{
        
            println(index)
        }

输出结果例如以下:

技术分享

可见NSArray数组也能够在Swift中直接进行声明并进行遍历。


(3)声明一个NSArray数组,转化为Array数组。再进行遍历:

   let stringNSArray: NSArray = ["10", "20","30","40","50"]
        let stringArray:[String] = stringNSArray as! [String]
        
        for index in stringArray{
        
            println(index)
        }

输出结果例如以下:

技术分享


可见NSArray能够在类型转换后直接赋值给Array数组。然后也能够进行遍历。


(4)声明一个Array数组,转化为NSArray,再进行遍历:

     let stringArray: Array<String> = ["10", "20","30","40","50"]
        let stringNSArray:NSArray = stringArray
        for index in stringNSArray{
        
            println(index)
        }

输出结果例如以下:

技术分享

能够看到Array数组也能够直接转化为NSArray。并进行遍历。             


      总结,Swift在数组方面Array非常好的兼容了OC中的NSArray。能够直接进行赋值转换。


github主页:https://github.com/chenyufeng1991  。

欢迎大家訪问!








































以上是关于如何在JS中实现相互转换XML和JSON的主要内容,如果未能解决你的问题,请参考以下文章

JS中实现字符串和数组的相互转化

Swift中实现Array数组和NSArray数组的相互转换与遍历

工具类|java实现Json和XML相互转换

iptables中实现内外网相互访问 SNAT与DNAT的原理与应用

xml和JSON格式相互转换的Java实现

Java中xml与json的相互转换