2010-03-22 41 views
2

所以我是XML DOM和JavaScript的初學者,但我遇到了一個問題。我正在使用該腳本在現有網站的表格中顯示我的XML數據。問題出現在我的JavaScript代碼中嵌套一個循環。JavaScript和XML Dom - 嵌套循環

這裏是我的XML:

<?xml version="1.0" encoding="utf-8"?> 
<book_list> 
    <author> 
    <first_name>Mary</first_name> 
    <last_name>Abbott Hess</last_name> 
     <books> 
     <title>The Healthy Gourmet Cookbook</title> 
     </books> 
    </author> 
    <author> 
    <first_name>Beverly</first_name> 
    <last_name>Bare Bueher</last_name> 
     <books> 
     <title>Cary Grant: A Bio-Bibliography</title> 
     <title>Japanese Films</title> 
     </books> 
    </author> 
    <author> 
    <first_name>James P.</first_name> 
    <last_name>Bateman</last_name> 
     <books> 
     <title>Illinois Land Use Law</title> 
     </books> 
    </author> 
</book_list> 

然後我用這個JavaScript代碼來讀取和顯示數據:

> <script type="text/javascript"> if 
> (window.XMLHttpRequest) { 
> xhttp=new XMLHttpRequest(); } else 
> // Internet Explorer 5/6 { 
> xhttp=new 
> ActiveXObject("Microsoft.XMLHTTP"); 
> } xhttp.open("GET","books.xml",false); 
> xhttp.send(""); 
> xmlDoc=xhttp.responseXML; 
> 
> document.write("<table>"); var 
> x=xmlDoc.getElementsByTagName("author"); 
> for (i=0;i<x.length;i++) { 
> document.write("<tr><td>"); 
> document.write(x[i].getElementsByTagName("first_name")[0].childNodes[0].nodeValue); 
> document.write("&nbsp;"); 
> document.write(x[i].getElementsByTagName("last_name")[0].childNodes[0].nodeValue); 
> document.write("</td><td>"); 
> document.write(x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue); 
> document.write("</td></tr>"); } 
> document.write("</table>"); </script> 

代碼工作得很好,除了它只返回各自的第一個title元素作者。我有點理解它爲什麼這樣做,但我不知道如何嵌套另一個循環,所以當腳本運行時,它顯示作者的所有標題,而不僅僅是第一個。每當我嘗試嵌套一個循環時,它就會破壞整個腳本。

+0

爲什麼使用document.write? – austincheney 2012-07-27 18:25:54

回答

1
getElementsByTagName("title")[0].childNodes[0].nodeValue 

這就是爲什麼。你只拿到第一個冠軍。把另一個循環,將生成所有igetElementsByTagName("title")[i]

我的提示: 使用jquery並在3行中寫你的代碼沒有這樣的問題。

+0

謝謝Naugtur,我在jQuery方面經驗不足,但是這很有幫助,我覺得這個問題很重要。我試圖把這樣的for循環: var y = x [i] .getElementsByTagName(「books」);對於(n = 0; n BSteck 2010-03-22 16:53:24