您的位置:首页 > Web前端 > JavaScript

JavaScript加载XML文件,并解析为JSON对象

2011-04-25 13:06 471 查看
JavaScript加载XML文件,并解析为JSON对象
首先是加载XML文件代码,并返回XML文档对象:

这段代码来自天空的博客

function loadXMLDOC(xmlURL) {
var xmlDoc;
try{
//IE,创建空的微软 XML 文档对象
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}catch(e){
try{
//FF,创建空的 XML 文档对象
xmlDoc=document.implementation.createDocument("","",null);
}catch(e){
alert(e.message);
}
}
try{
//关闭异步加载,可确保在文档完整加载之前,解析器不会继续执行脚本
xmlDoc.async=false;
//加载XML文档
xmlDoc.load(xmlURL);
}catch(e){
alert(e.message);
return false;
}
return xmlDoc;
}


把XML对象转换成JSON对象代码:

这段JS代码和XML代码都来自davidwalsh的博客.
function xmlToJson(xml) {
// Create the return object
var obj = {};
if (xml.nodeType == 1) { // element
// do attributes
if (xml.attributes.length > 0) {
obj["@attributes"] = {};
for (var j = 0; j < xml.attributes.length; j++) {
var attribute = xml.attributes.item(j);
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
}
}
} else if (xml.nodeType == 3) { // text
obj = xml.nodeValue;
}
// do children
if (xml.hasChildNodes()) {
for(var i = 0; i < xml.childNodes.length; i++) {
var item = xml.childNodes.item(i);
var nodeName = item.nodeName;
if (typeof(obj[nodeName]) == "undefined") {
obj[nodeName] = xmlToJson(item);
} else {
if (typeof(obj[nodeName].length) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
return obj;
}


XML测试文件代码:
<ALEXA VER="0.9" URL="davidwalsh.name/" HOME="0" AID="=">
<SD TITLE="A" FLAGS="" HOST="davidwalsh.name">
<TITLE TEXT="David Walsh Blog:PHP, MySQL,CSS,Javascript,MooTools"/>
<LINKSIN NUM="1102"/>
<SPEED TEXT="1421" PCT="51"/>
</SD>
<SD>
<POPULARITY URL="davidwalsh.name/" TEXT="7131"/>
<REACH RANK="5952"/>
<RANK DELTA="-1648"/>
</SD>
</ALEXA>


调用代码:

var myxmlDoc = loadXMLDOC('test.xml');
var jsonText = JSON.stringify(xmlToJson(myxmlDoc));
document.write(jsonText);


最终返回的字符串是:
{
"ALEXA":{
"@attributes":{
"VER":"0.9",
"URL":"davidwalsh.name/",
"HOME":"0",
"AID":"="
},
"SD":[{
"@attributes":{
"TITLE":"A",
"FLAGS":"",
"HOST":"davidwalsh.name"
},
"TITLE":{
"@attributes":{
"TEXT":"David Walsh Blog:PHP, MySQL,CSS,Javascript,MooTools"
}
},
"LINKSIN":{
"@attributes":{
"NUM":"1102"
}
},
"SPEED":{
"@attributes":{
"TEXT":"1421",
"PCT":"51"
}
}
},{
"POPULARITY":{
"@attributes":{
"URL":"davidwalsh.name/",
"TEXT":"7131"
}
},
"REACH":{
"@attributes":{
"RANK":"5952"
}
},
"RANK":{
"@attributes":{
"DELTA":"-1648"
}
}
}]
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: