2013-03-20 3 views
2

Я последовал следующий урок - http://davidwalsh.name/convert-xml-json и получаю ошибку:Проблема с преобразованием 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> 

Спасибо!

+0

Настройка скрипку, если вы хотите помочь. – dfsq

+0

Я не эксперт по javascript, но вы не передаете * filename * методу xmlToJson? Конечно, вы должны сначала прочитать xml с диска в XML-объект, который, следовательно, должен иметь соответствующие функции. – shunty

+0

@Sneha - вам нужно передать строку xml в функцию 'xmlToJson', а не путь к файлу xml ... – CoderHawk

ответ

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> 
+0

это всего лишь образец. Мой XML-файл проверен, и все в порядке. Это не проблема, которую я чувствую :( – Smitha

Смежные вопросы