2011-03-23 2 views
2

J'utilise QML et XMLHttpRequest pour extraire des données XML.Analyser XML à partir de XMLHttpRequest

var doc = new XMLHttpRequest(); 
    if (doc.readyState == XMLHttpRequest.DONE) { 
     var root = doc.responseXML.documentElement; 

     // Go through recenttracks children 
     var recentTracks = root.childNodes[1]; 
     for (var i=0; i < recentTracks.childNodes.length; ++i) 
     { 
      var child = recentTracks.childNodes[i]; 
      for (var j=0; j < child.childNodes.length; ++j) 
      { 
       if (child.childNodes[j].nodeName == "name") 
       { 
        console.log(child.childNodes[j].nodeValue); // [!] 
       } 
      } 
     } 
    } 

J'analyse, par exemple, XML.

<track> 
<artist mbid="293f35f8-3682-44bd-9471-13ca94fa9560">Tyler James</artist> 
<name>Tried To Measure</name> 
<streamable>0</streamable> 
<album mbid="">It Took The Fire</album> 
<url>http://www.last.fm/music/Tyler+James/_/Tried+To+Measure</url> 
<image size="small">http://userserve-ak.last.fm/serve/34s/59408859.jpg</image> 
</track> 

Regardez maintenant le commentaire dans le code [!]. Avant cette ligne, je vérifie si le nom du noeud actuel est "name" (regardez XML). Maintenant, je veux obtenir la valeur name. J'ai écrit: child.childNodes[j].nodeValue, mais il renvoie null tous les 10 fois (il y a 10 enfants). Qu'est-ce qui ne va pas?

+0

Quelle langue est-ce? –

Répondre

6

Le texte d'un noeud d'élément dans le DOM est représenté par un élément enfant (un noeud de texte). La valeur du noeud de texte est ce que vous voulez.

donc changer

child.childNodes[j].nodeValue 

dans

child.childNodes[j].childNodes[0].nodeValue 

pour le faire fonctionner.

Voir http://www.w3schools.com/dom/dom_nodes_get.asp

Peut-être envisager également d'utiliser un XmlListModel.

Questions connexes