2010-12-06 5 views
8

J'essaie de boucle à travers les nœuds XML qui se composent d'utilisateurs pour créer en table html sur mon siteComment faire une boucle sur un noeud XML en javascript?

for(var user in xmlhttp.getElementsByTagName('user')){ //fix this row to me 
    //Create a new row for tbody 
    var tr = document.createElement('tr'); 
    document.getElementById('tbody').appendChild(tr); 
} 

le look xml comme celui-ci

<websites_name> 
<user>...</user> 
<user>...</user> 
. 
. 
. 
</websites_name> 

MISE À JOUR

xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET","some URL",true); 
xmlhttp.send(); 
var xmlDoc = xmlhttp.responseXML; 
var root = xmlDoc.getElementsByTagName('websites_name'); 
for(var i=0, i<root[0].childNodes.length,i++){ 
    //Create a new row for tbody 
    var tr = document.createElement('tr'); 
    document.getElementById('tbody').appendChild(tr); 
} 

Répondre

12

L'un des Les choses les moins intuitives à propos de l'analyse XML sont que le texte à l'intérieur des balises de l'élément est en fait un nœud que vous devez traverser. En supposant que ce soit <user>text data</user>, vous devez non seulement traverser dans le nœud de texte de l'élément utilisateur pour extraire vos données de texte, mais vous devez créer un nœud de texte avec ces données dans le DOM pour le voir. Voir nodeValue et et createtextnode.

// get XML 
var xml = xhr.responseXML; 

// get users 
var users = xml.getElementsByTagName("user"); 
for (var i = 0; i < users.length; i++) { 
    var user = users[i].firstChild.nodeValue; 
    var tr = document.createElement("tr"); 
    var td = document.createElement("td"); 
    var textNode = document.createTextNode(user); 
    td.appendChild(textNode);   
    tr.appendChild(td);   
    document.getElementById("tbody").appendChild(tr); 
} 
+0

J'ai localisé le problème, il se trouve dans la ligne « var root = xmlDoc.getElementsByTagName (» de websites_name «); » Qu'ai-je fait de mal? Regardez ma mise à jour. Votre solution est la même à l'exception du textNode. Il s'agit en fait de noeuds XML sous l'utilisateur – einstein

+0

ok je sais quel était le problème. Un très mineur. Les scripts qui ont produit mon XML, j'ai oublié la ligne "header" ("Content-type: text/xml"); " – einstein

+0

awesome - oui, ce type de contenu est super important avec ajax. ce truc est beaucoup plus facile avec des librairies comme jquery ... –

Questions connexes