Parser du XML avec Javascript

Parser du XML avec Javascript - HTML/CSS - Programmation

Marsh Posté le 22-01-2006 à 22:26:50    

Bonjour,
 
Je tente de faire une petite applicaton qui récupère des données contenues dans un fichier xml via javascript.
Pour cela, j'utilise XMLHttpRequest et j'arrive ensuite à parser en partie mon document XML.
 
Pour récupérer les attributs d'un tag précis, j'utilise en gros la ligne suivante (adaptée à mes besoins ensuite) :
 


reqXML.responseXML.getElementsByTagName("nom_du_tag" )[0].getAttribute("nom_attribut" );


 
où reqXMLest une instance de l'objet XMLHttpRequest.  
Ceci marche bien.
 
Cependant, j'ai quelques problèmes pour récupérer les valeurs de certains tags imbriqués.
 
Par exemple si l'on a  
 


<rte><number>0</number><name>Test</name></number></rte>


 
Ici, je pourrais récupérer le contenu entre les balises number et name en me servant de getElementsByTagName de la manière suivante :
 


reqXML.responseXML.getElementsByTagName("nom_du_tag" )[0].firstChild.nodeValue;


 
Cependant en me servant de ça et en parcourant tous les tags number,  j'aurais toutes les valeurs des tags number ici mais en dehors du contexte c'est-à-dire que le fait que ce soit imbriqué dans le tag rte ne serait pas pris en compte pour mon traitement après.
 
Ce que j'aimerais arriver à faire c'est la chose suivante :  
 
- Chercher les tags rte (ça je sais le faire)
- et ensuite pour chacun de ces tags, parcourir chacun des fils de ce tag et faire le traitement adéquat.
 
Et malheureusement, je n'arrive pas à faire cette seconde étape, je n'arrive pas à parcourir les fils d'un tag et récupérer les valeurs contenues dans ces tags.
 
Si quelqu'un avait une idée de la manière de récupérer ces informations, je suis preneur.
 
 
Merci d'avance de votre aide.
 
Sylvain.

Reply

Marsh Posté le 22-01-2006 à 22:26:50   

Reply

Marsh Posté le 23-01-2006 à 09:34:13    

Ce qu'il te manque c'est la proprieté childNodes. Suffit de faire un truc dans le genre:

Code :
  1. rteNode = reqXML.responseXML.getElementsByTagName("nom_du_tag" ).item(0);
  2. for(var i=0; i<=rteNode.childNodes.length; i++){
  3.   switch( rteNode.childNodes.item(i).tagName ){
  4.     case 'number':
  5.              ... ton traitement des numbers ...
  6.     break;
  7.     case 'name':
  8.              ... ton traitement des names ...
  9.     break;
  10.     default:
  11.     break;
  12.   }
  13. }


 
Par contre je te déconseille de te servir de la syntaxe suivante:

Code :
  1. reqXML.responseXML.getElementsByTagName("nom_du_tag" )[0]


Cela laisse croire que le retour de getElementsByTagName retourne un tableau, alors que cela retourne une liste de noeud.
Utilise plutot

Code :
  1. reqXML.responseXML.getElementsByTagName("nom_du_tag" ).item(0)


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed