2010-03-22 3 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> 

код работает хорошо, за исключением его только возвращает первый элемент заголовка каждого автор. Я несколько понимаю, почему это так, но я не знаю, как вложить другой цикл, поэтому при запуске скрипта отображаются все заголовки для автора, а не только первые. Всякий раз, когда я пытаюсь вложить петлю, он разбивает весь скрипт.

+0

Почему вы используете document.write? – austincheney

ответ

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

вот почему. Вы берете только первый заголовок. Поместите еще один цикл, который будет генерировать все i для getElementsByTagName("title")[i]

Мой совет: использовать jquery и написать свой код в 3 строках без проблем.

+0

Спасибо Naugtur, я еще менее опытен в jQuery, но это было полезно, я подумал, что это проблема. Я попытался включить цикл for следующим образом: var y = x [i] .getElementsByTagName ("books"); для (n = 0; n BSteck

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