将xml转换为JSON的问题

时间:2013-03-20 07:24:23

标签: xml json parsing

我按照以下教程 - http://davidwalsh.name/convert-xml-json并收到错误:

Uncaught exception: TypeError: 'xml.hasChildNodes' is not a function.

我不知道如何解决这个问题?许多人在网站上发布了相同的内容。但没有运气。

请帮忙。

代码在这里:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<title>Welcome</title>  

<script type="text/javascript">  
function myFun()  
{  
    alert("hi..");  
    var jsonText = JSON.stringify(xmlToJson("D:/Tech/data.xml"));  
    for(var i in jsonText)  
   {
        alert(i);
   }
}   

// Changes XML to JSON  
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].push) == "undefined") {  
                    var old = obj[nodeName];  
                    obj[nodeName] = [];  
                    obj[nodeName].push(old);  
                }  
                 obj[nodeName].push(xmlToJson(item));  
            }  
        }  
    }  
    return obj;  
};  

 </script>  

</head>  

<body onload="myFun()">  
 Hello  
</body>  
</html>  

data.xml就像这样:

<applications>  
<application id="backupparking">  
  <toplevel />   
 <contexts>  
 <context id="Idle" />   
 <context id="ABCD" />   
 <context id="EFGH" />   
 <context id="LMN">  
 <payload>  
  <member id="hi" type="string" />   
  </payload>  
  </context>  
  </application>  
  </applications>  

谢谢!

1 个答案:

答案 0 :(得分:0)

contexts标记未正确关闭。

尝试

<applications>  
<application id="backupparking">  
  <toplevel />   
 <contexts />  
 <context id="Idle" />   
 <context id="ABCD" />   
 <context id="EFGH" />   
 <context id="LMN">  
 <payload>  
  <member id="hi" type="string" />   
  </payload>  
  </context>  
  </application>  
  </applications> 

或者

<applications>  
<application id="backupparking">  
  <toplevel />   
 <contexts>  
 <context id="Idle" />   
 <context id="ABCD" />   
 <context id="EFGH" />   
 <context id="LMN">  
 <payload>  
  <member id="hi" type="string" />   
  </payload>  
  </context>  
 </contexts>  
  </application>  
  </applications>