首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

帮批改XML和JS对象相互转换的代码

2013-07-16 
帮修改XML和JS对象相互转换的代码初学JS请大神指教。。就是需要XML和JS对象相互转换搞了半天终于搞了个似乎

帮修改XML和JS对象相互转换的代码
初学JS请大神指教。。
就是需要XML和JS对象相互转换
搞了半天终于搞了个似乎还能运行的代码,不过感觉质量有点渣。。
首先要一个全局变量pXml记录位置,本来想作为函数参数传递,但JS普通类型又不能传引用,所以还是要用全局变量才行,大神怎么可以不用这个全局变量啊。。
然后整体代码都显得比较臃肿,怎么可以精简一点啊。。对象转XML代码还好,XML转对象真的十分纠结啊。。
各位大神帮帮忙。。小弟分真的不多。。


<script>

//XML 转 对象
var pXml = 0;
function getObj(xml,preTag)
{
var left = -1,right = -1;
var tag = "",content = "";
var obj = new Object();
while (pXml < xml.length)
{
left = xml.indexOf("<",pXml);
right = xml.indexOf(">",pXml);
if ((left | right != -1) && (left < right))
{
tag = xml.substring(left + 1,right);
if (tag[0] == "/")
{
if (tag != "/" + preTag)
{
//匹配错误
pXml = right + 1;
return;
}
if (obj.length)
{
pXml = right + 1;
return obj;
}
content = xml.substring(pXml,left);
pXml = right + 1;
return content;
}else
{
pXml = right + 1;
obj.length = ++obj.length || 1;
obj[tag] = getObj(xml,tag);
}
}else
{
break;
}
}
return obj;
}

function xmlToObj(xml)
{
pXml = 0;
return getObj(xml.substring(xml.indexOf(">") + 1,xml.lastIndexOf("<")));
}

//对象 转 XML
function getXml(obj)
{
var xml = "";
for (var attr in obj)
{
if (obj[attr] instanceof Object)
{
xml += "<" +  attr + ">";
xml += getXml(obj[attr]);
xml += "</" + attr + ">";
}else
{
xml += "<" +  attr + ">";
xml += obj[attr];
xml += "</" + attr + ">";
}
}

return xml;
}

function objToXml(obj)
{
return "<root>" + getXml(obj) + "</root>";
}

//测试数据
var obj1 = {
"First" : "Something",
"Second" : {
"First" : "Something more",
"Data" : "Some data"
},
"Third" : "Balabala"
};

//正常情况
var xml = objToXml(obj1)


var obj2 = xmlToObj(xml);

//匹配错误情况
xml = "<root><first>123</first><second><err>Nothing</error><haha>Something</haha></second></root>";
var obj3 = xmlToObj(xml);
</script>

JavaScript XML 对象
[解决办法]

var xml = "<root><first>123</first><second><error>Nothing</error><haha>Something</haha></second></root>";
var parseXML2JSON = {
parse : function(xmlStr){
var root = document.createElement('XMLROOT');
root.innerHTML = xmlStr;
return this.parse2json(root);
},
parse2json : function(node){
var result = {};
if(node.childNodes.length > 0){
for(var i = 0 ; i < node.childNodes.length ; ++i){
if(node.childNodes[i].nodeType==1){
result[node.childNodes[i].nodeName.toLowerCase()] = this.parse2json(node.childNodes[i]);
}else if(node.childNodes[i].nodeType==3){
return node.childNodes[i].nodeValue;
}

}
}
return result;
}
};
var jsonData = parseXML2JSON.parse(xml);
alert(JSON.stringify(jsonData));

[解决办法]
学的PHP看来邦不上心
[解决办法]
引用:
var xml = "<root><first>123</first><second><error>Nothing</error><haha>Something</haha></second></root>";
var parseXML2JSON = {
parse : function(xmlStr){
var root = document.createElement('XMLROOT');
root.innerHTML = xmlStr;
return this.parse2json(root);
},
parse2json : function(node){
var result = {};
if(node.childNodes.length > 0){
for(var i = 0 ; i < node.childNodes.length ; ++i){


if(node.childNodes[i].nodeType==1){
result[node.childNodes[i].nodeName.toLowerCase()] = this.parse2json(node.childNodes[i]);
}else if(node.childNodes[i].nodeType==3){
return node.childNodes[i].nodeValue;
}

}
}
return result;
}
};
var jsonData = parseXML2JSON.parse(xml);
alert(JSON.stringify(jsonData));



很好的实现
[解决办法]
引用:
var xml = "<root><first>123</first><second><error>Nothing</error><haha>Something</haha></second></root>";
var parseXML2JSON = {
parse : function(xmlStr){
var root = document.createElement('XMLROOT');
root.innerHTML = xmlStr;
return this.parse2json(root);
},
parse2json : function(node){
var result = {};
if(node.childNodes.length > 0){
for(var i = 0 ; i < node.childNodes.length ; ++i){
if(node.childNodes[i].nodeType==1){
result[node.childNodes[i].nodeName.toLowerCase()] = this.parse2json(node.childNodes[i]);
}else if(node.childNodes[i].nodeType==3){
return node.childNodes[i].nodeValue;
}

}
}
return result;
}
};
var jsonData = parseXML2JSON.parse(xml);
alert(JSON.stringify(jsonData));

昨天晚上太晚了,没有写完,今天把json2xml补上。

var xml = "<root><first>123</first><second><error>Nothing</error><haha>Something</haha></second></root>";
var parseXMLJSON = {
    parse2json: function(xmlStr){
        var root = document.createElement('XMLROOT');
        root.innerHTML = xmlStr;        
        return this.parse(root);
    } ,
    parse: function(node){
        var result = {};                  
        for(var i = 0 ; i < node.childNodes.length ; ++i){
            if(node.childNodes[i].nodeType==1){


                result[node.childNodes[i].nodeName.toLowerCase()] = this.parse(node.childNodes[i]);
            }else if(node.childNodes[i].nodeType==3){                                        
                return node.childNodes[i].nodeValue;
            }                 
        }
        return result;
    } ,
    parse2xml: function(data){
        var xmldata = '';
        for(var i in data){
            xmldata+= '<'+i+'>';
            if(typeof data[i]=='object'){
                xmldata+= this.parse2xml(data[i]);
            }else{
                xmldata+= data[i];
            }
            xmldata+= '</'+i+'>';
        }
        return xmldata;
    }
};
var jsonData = parseXMLJSON.parse2json(xml);
var xmlData = parseXMLJSON.parse2xml(jsonData);
alert('xml to json: ' + JSON.stringify(jsonData));
alert('json to xml: ' + xmlData);

热点排行