2012-11-02 108 views
15

我是Stack OverFlow和一般編碼的新手。我正在嘗試使用JavaScript將XML文件呈現在瀏覽器中。我已經在如何做到這一點一些示例代碼環顧四周,用下面的代碼上來:使用JavaScript解析XML文件

<!DOCTYPE html> 
<html> 
<body> 

<script> 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.open("GET","social.xml",false); 
    xmlhttp.send(); 
    xmlDoc=xmlhttp.responseXML; 

document.write("<table border='1'>"); 
var x=xmlDoc.getElementsByTagName("CD"); 
for (i=0;i<x.length;i++) 
    { 
    document.write("<tr><td>"); 
    document.write(x[i].getElementsByTagName("c_id")[0].childNodes[0].nodeValue); 
    document.write("</td><td>"); 
    document.write(x[i].getElementsByTagName("facebook_id")[0].childNodes[0].nodeValue); 
    document.write("</td></tr>"); 
    } 
    document.write("</table>"); 
</script> 

</body> 
</html> 

無論如何,當我在我的本地服務器沒有,我想在顯示的數據中運行這個表出現。我的.html文件和.xml文件位於同一個文件夾中,所以我相信我有正確的文件路徑。我可能只是在這裏犯了一個菜鳥錯誤,但是我不能爲了我的生活找出爲什麼沒有創建列出c_id和facebook_id值的表。我四處尋找答案,一直沒有找到答案。任何幫助將不勝感激。謝謝!

+0

你使用的是什麼瀏覽器測試呢?它是否報告任何錯誤? –

回答

12

在發送請求之前,您需要將onload事件偵聽器添加到xmlhttprequest。另外,您可能需要使用DOMParser解析XML。無論如何,這應該在現代瀏覽器的工作:

<!DOCTYPE html> 
<html> 
    <body> 

     <script> 
      if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp=new XMLHttpRequest(); 
      } 
      else 
      {// code for IE6, IE5 
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 



      xmlhttp.onload = function() { 
       var xmlDoc = new DOMParser().parseFromString(xmlhttp.responseText,'text/xml'); 

       console.log(xmlDoc); 

       document.write("<table border='1'>"); 
       var x=xmlDoc.getElementsByTagName("CD"); 
       for (i=0;i<x.length;i++) 
       { 
        document.write("<tr><td>"); 
        document.write(x[i].getElementsByTagName("c_id")[0].childNodes[0].nodeValue); 
        document.write("</td><td>"); 
        document.write(x[i].getElementsByTagName("facebook_id")[0].childNodes[0].nodeValue); 
        document.write("</td></tr>"); 
       } 
       document.write("</table>"); 

      } 


      xmlhttp.open("GET","social.xml",false); 
      xmlhttp.send(); 
      </script> 

    </body> 
</html> 

現在,只需一兩件事情值得一提的你在做什麼:

  • xmlhttprequest對象都意味着不同的許多不同的參數東西:readystate,狀態碼,作品。你可能會從中受益更多。

  • document.write應該永遠不會被使用,永遠。事實上,任何HTML注入手段都應該非常小心地處理。如果你想:)你可以使用在許多MVC式的框架,共同基於模板的解決方案,或mine