Partage
  • Partager sur Facebook
  • Partager sur Twitter

XML et Javascript

Difficultés à naviguer dans le fichier XML

Sujet résolu
    5 avril 2009 à 16:38:44

    Bonjour :) ,

    j'aimerai traiter un fichier XML en JavaScript mais je ne vois pas trop comment m'y prendre, j'obtiens des résultats bizarres ...

    Voilà mon fichier xml :
    <donnees>
    
    <semaine>
    
    <debut>
    <time>1238364000</time>
    <date>Lundi 30 Mars 2009</date>
    </debut>
    
    <fin>
    <time>1238968799</time>
    <date>Dimanche 05 Avril 2009</date>
    </fin>
    
    <precedente>
    <numero>13</numero>
    <annee>2009</annee>
    </precedente>
    
    <suivante>
    <numero>15</numero>
    <annee>2009</annee>
    </suivante>
    
    </semaine>
    
    </donnees>
    


    Je récupère le tout dans une variable "monXML". Mais voilà, je n'arrive pas à accéder à "Dimanche 05 Avril 2009" (par exemple), la seule méthode que j'ai trouvée est:

    monXML.getElementsByTagName('date')[1].firstChild.data
    


    mais moi j'aimerai bien y accéder en faisant:
    monXML.firstChild.firstChild.childNodes[1].childNodes[1].firstChild.data
    


    Mais ça ne marche pas :s

    Enfin voilà, un peu d'aide serait la bienvenue...

    Merci ;)
    • Partager sur Facebook
    • Partager sur Twitter
      5 avril 2009 à 16:53:32

      C'est normal. Regarde :

      <donnees><firstchild /></donnees>
      


      Et différent de

      <donnees>
      <firstchild />
      </donnees>
      


      En fait, Firefox voit le XML comme ça :

      <donnees>[retour à la ligne = noeud de texte : c'est lui le firstChild !]
      <firstchild />[noeud de texte]
      </donnees>
      


      Donc, dans l'exemple ci dessus, pour accéder à <firstchild /> tu dois faire elementDonnees.childNodes[1]. ( autres explications : http://javascript.developpez.com/faq/? [...] #DOMIEFirefox ).

      Tu peux utiliser cette fonction pour nettoyer les espaces vides et obtenir un coportement "comme on le voudrait" (et comme le fai IE) :

      function go(c){
      	if(!c.data.replace(/\s/g,''))
      		c.parentNode.removeChild(c);
      }
      
      function clean(d){
      	var bal=d.getElementsByTagName('*');
      
      	for(i=0;i<bal.length;i++){
      		a=bal[i].previousSibling;
      		if(a && a.nodeType==3)
      			go(a);
      		b=bal[i].nextSibling;
      		if(b && b.nodeType==3)
      			go(b);
      	}
      	return d;
      }
      

      A utiliser comme ça :
      monXML = clean(monXML);
      • Partager sur Facebook
      • Partager sur Twitter

      Ma vraie biographie - Ex-Manager de la Validation sur le Site du Zéro - sdlm.be - Horus.aero

        5 avril 2009 à 17:19:04

        Okay !!!!

        Merci beaucoup, je crois que j'ai compris le truc.

        Et si j'utilise la fonction magique que tu m'as passé, mon script sera compatible IE à ce niveau là ?

        Merci beaucoup en tout cas ;)
        • Partager sur Facebook
        • Partager sur Twitter
          5 avril 2009 à 17:30:41

          Oui, le script va juste supprimer les noeuds vides que voit Firefox. Comme IE n'en voit pas, bah il n'y a rien à supprimer ^^ .
          • Partager sur Facebook
          • Partager sur Twitter

          Ma vraie biographie - Ex-Manager de la Validation sur le Site du Zéro - sdlm.be - Horus.aero

          XML et Javascript

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown