2010-03-22 6 views
2

Donc je suis un débutant en DOM XML et JavaScript mais j'ai rencontré un problème. J'utilise le script pour afficher mes données XML dans une table sur un site existant. Le problème vient en imbriquant une boucle dans mon code JavaScript.JavaScript et XML Dom - Nested Loop

Voici mon 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> 

J'utilise ensuite ce code JavaScript pour lire et afficher les données:

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

Le code fonctionne bien sauf qu'il ne retourne que le premier élément de titre de chaque auteur. Je comprends un peu pourquoi c'est ce qu'il fait, mais je ne sais pas comment imbriquer une autre boucle alors quand le script s'exécute, il affiche tous les titres d'un auteur, pas seulement le premier. Chaque fois que j'essaie d'imbriquer une boucle, elle brise tout le script.

+0

Pourquoi utilisez-vous document.write? – austincheney

Répondre

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

c'est pourquoi. Vous prenez le premier titre seulement. Mettez une autre boucle qui va générer tous i pour getElementsByTagName("title")[i]

Mon conseil: utilisez jquery et écrivez votre code en 3 lignes sans problèmes comme ça.

+0

Merci Naugtur, je suis encore moins expérimenté en jQuery mais c'était utile, j'ai pensé que la ligne était le problème. J'ai essayé de mettre dans une boucle for comme ceci: var y = x [i] .getElementsByTagName ("livres"); pour (n = 0; n BSteck