2011-09-09 17 views
0

我會保持這個很短的: 我試圖通過一個xml文檔爲圖庫進行循環。我得到了一個應該可以工作的腳本,但沒有。任何人都可以告訴我我做錯了嗎?javascript xml reader

我不想讓這個更長,因爲問題很簡單,並且從昨天開始一直在思考這個問題,這是我最接近的。

我想循環訪問xml文件並首先打印出「路徑」和「文件」。我正在構建一個庫,並認爲保存圖像的所有數據的最佳方式是一個xml文件,但現在我無法使其正確循環。在腳本中,我將頁面打印出x和i,結果是x爲1,我爲0,因此它沒有像我看到的那樣完成for循環。

任何幫助將不勝感激,因爲我卡住了。一直在嘗試這麼多的解決方案,我的腦袋正在旋轉,如果沒有朝着正確的方向輕推,我就無法繼續前進。

的HTML/JavaScript的:

 <script type="text/javascript"> 
      function displayResult() 
      { 
       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","../gallery/gallery.xml",false); 
       xmlhttp.send(); 
       xmlDoc=xmlhttp.responseXML; 


       x=xmlDoc.getElementsByTagName("session"); 
       for (i=0;i<x.length;i++) 
       { 
        img = "<img src='"; 
        path = (x[0].getElementsByTagName("path")[0].childNodes[0].nodeValue); 
        file = (x[i].getElementsByTagName("file")[i].childNodes[0].nodeValue); 
        end = "' /><br />"; 
        name = (x[i].getElementsByTagName("name")[i].childNodes[0].nodeValue); 
        txt = "x:" + x.length + "| i " + i + "<br />" + img + path + file + end + name + "<br />"; 
        document.getElementById("content").innerHTML = txt; 
        //document.write(txt); 
       } 
      } 
     </script> 
    </head> 
    <body onload="displayResult()"> 
     <div id='content'></div> 
    </body> 
</html> 

XML文件:

<gallery> 
    <session> 
     <path>../gallery/beauty/</path> 
     <item> 
      <file>_DSC2331.jpg</file> 
      <name>Picture 1</name> 
     </item> 
     <item> 
      <file>_DSC2339.jpg</file> 
      <name>Picture 2</name> 
     </item> 
     <item> 
      <file>_DSC2350.jpg</file> 
      <name>Picture 3</name> 
     </item> 
     <date>2011-08-03</date> 
    </session> 
</gallery> 
+0

這有點太*太短。你可以給更多的方向嗎?也許有任何錯誤或怪異的行爲?不太可能你會得到很多關注,說「修復我的代碼」。 這是幹什麼的? –

+0

不知道發生了什麼,你期望什麼? – tomdemuyt

+0

你必須告訴我們它是如何工作的。 XHR不工作? getElementsByTagName搜索不起作用嗎?內容更新是否無效? –

回答

2

如果我能提出一些建議:

  1. 使用var關鍵字職能範圍內,使這些局部變量該功能。您目前擁有的代碼會在全局名稱空間中設置值,這通常被認爲是不好的做法(例如,您可能會覆蓋其他人的變量,或者其他人可能會覆蓋您的變量)。還要在函數的開頭聲明變量,因爲無論如何它們都是hoisted
  2. 將代碼分解爲更多有意義的功能。這樣他們變得更容易閱讀,並且往往變得更加可重用。
  3. 請確保您通過items以及sessions循環。
  4. 考慮使用類似於jQuery的Javascript框架。他們通常可以簡化必須編寫的代碼,並且通常最終會自己編寫更少的代碼。

<html> 
    <head> 
     <script type="text/javascript"> 
      function loadDoc(url) { 
       var xmlhttp = null; 
       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", url, false); 
       xmlhttp.send(); 
       return xmlhttp.responseXML; 
      } 

      function getContent(sessions) { 
       var items = null, 
        i = 0, 
        j = 0, 
        img = "", 
        path = "", 
        file = "", 
        end = "", 
        name = "", 
        txt = ""; 
       for (i = 0; i < sessions.length; i++) { 
        items = sessions[i].getElementsByTagName("item"); 
        path = sessions[i].getElementsByTagName("path")[0].childNodes[0].nodeValue; 
        for (j = 0; j < items.length; j++) { 
         img = "<img src='"; 
         file = items[j].getElementsByTagName("file")[0].childNodes[0].nodeValue; 
         end = "' /><br />"; 
         name = items[j].getElementsByTagName("name")[0].childNodes[0].nodeValue; 
         txt += "session[" + i + "] item[" + j + "]<br />" + img + path + file + end + name + "<br />"; 
        } 
       } 
       return txt; 
      } 

      function displayResult() 
      { 
       var xmlDoc = loadDoc("../gallery/gallery.xml"); 
       var sessions = xmlDoc.getElementsByTagName("session"); 
       var txt = getContent(sessions); 
       document.getElementById("content").innerHTML = txt; 
      } 
     </script> 
    </head> 
    <body onload="displayResult()"> 
     <div id='content'></div> 
    </body> 
</html> 
+1

輝煌,謝謝!感謝你,我想我已經在JavaScript中獲得了一個級別。現在我不必再討論這個代碼了,現在我會仔細思考這個代碼。再次;謝謝。 –

+1

不客氣。 –

0

這似乎給我,你要顯示所有項目。

然而,你循環'會議',其中只有一個。

所以最好將只得到1張這樣..

你可能要循環xmlDoc.getElementsByTagName("item")並仍然使用會話一個訪問路徑。

+0

x仍然大於我,所以它應該繼續向上計數並且無論如何搜索所有子節點。但它堅持在0.我會看看你說什麼,然後看看它是否能把我帶到某個地方。這只是混淆爲什麼它不會向上計數,因爲我要求它在屏幕上打印x和i。 –

+0

正如@tomdemuyt所說的那樣,x.length == 1正在循環通過''元素。 –

+0

但我仍然等於0,所以它不會上升。或者我在這裏以錯誤的方式思考? –