技术开发 频道

转换Json到XML的JavaScript实现

 转换

 转换过程就是把已经排序的数组数据整理成需要的XML格式。我需要的XML格式比较简单,就是Stations->City->Station三层。这里使用DOM来生成XML结构,DOM的介绍看 Document Object Model

  var stationsNode = document.createElement("Stations");

 var city = null;

 for (var i=0; i < stations.length; ++i) {

 if (stations[i].city != city) {

 city = stations[i].city;

 var cityNode = document.createElement("City");

 cityNode.setAttribute("name", city);

 stationsNode.appendChild(cityNode);

 }

 var stationNode = document.createElement("Station");

 stationNode.setAttribute("sid", stations[i].sid);

 stationNode.setAttribute("logname", stations[i].logname);

 stationNode.setAttribute("name", stations[i].name);

 stationNode.setAttribute("website", stations[i].website);

 stationNode.setAttribute("image", stations[i].image);

 stationNode.setAttribute("stream", stations[i].stream);

 cityNode.appendChild(stationNode);

 }

 //var xml = CreateXmlDoc("", "XML");

 var xml = document.createElement("XML");

 xml.appendChild(stationsNode);

 document.createElement()函数生成节点,setAttribute()函数设置节点的属性,appendChild()还是把节点添加到父节点中。

 显示

 其实上面是转换过程已经完成了XML生成的全部操作,可是XML不能直接显示在HTML中,所以需要对生成的XML进行修改来正常显示。

  var str = xml.innerHTML;

 var str2 = "";

 var level = 0;

 for (i = 0; i < str.length; ++i) {

 if (str[i] == "<") {

 if (str[i + 1] == "/") {

 --level;

 for (j = 0; j < level; ++j) {

 str2 += "&nbsp;";

 }

 }

 else {

 for (j = 0; j < level; ++j) {

 str2 += "&nbsp;";

 }

 ++level;

 }

 str2 += "&lt;";

 }

 else if (str[i] == ">") {

 str2 += "&gt;<br />";

 }

 else {

 str2 += str[i];

 }

 }

 把大于号和小于号进行替换,同时根据层次显示缩进。

0
相关文章