Partage
  • Partager sur Facebook
  • Partager sur Twitter

extraction xml provenant d'un fichier php

Sujet résolu
    17 juin 2010 à 11:06:47

    Bonjour, j'ai un xml qui m'est retourné via ajax dont le format est
    <patient>
    	  < examen>
    	    	< StudyInstanceUID1> varChar(64)</StudyInstanceUID1>
    		< dateExamen> aaaa-mm-jj < /dateExamen>	
    	    	< serie>	
                         <code_serie> UNSIGNED INT </code_serie>
                         < SeriesInstanceUID>varChar(64)< /SeriesInstanceUID>
    		     < descriptionSerie>STRING< /descriptionSerie>
    		     < modaliteSerie> STRING </modaliteSerie>
    		     < nbImageSerie>UNSIGNED INT</nbImageSerie>
                         <image> SOPInstanceUID1</image>
                                 …
                         <image>SOPInstanceUIDN</image>    
    	    	< /serie>	
                    < serie>	
                     …
                    </serie>
            </ examen>
            <examen>
              …
            </examen>
    </patient>
    
    mais je n'arrive pas du tout à extraire les données de mon xml. Je commence par récupérer toutes les balises examen comme ceci
    var docXmlPatientFolder= xhr.responseXML;
    	var itemsExamen = docXmlPatientFolder.getElementsByTagName("examen");
    	
    	 for (var i=0;i<itemsExamen.length;i++)
    	 {
    		 là je bloque 
    	 }
    
    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      17 juin 2010 à 11:18:12

      Salut, beh apres c'est le meme principe à priori :
      var docXmlPatientFolder= xhr.responseXML;
      	var itemsExamen = docXmlPatientFolder.getElementsByTagName("examen");
      	
      	 for (var i=0;i<itemsExamen.length;i++)
      	 {
      		 var itemStudyInstanceUID1 = itemsExamen[i].getElementsByTagName("Study....");
                       var itemDateExam = itemsExamen[i].getElementsByTagName("dateExamen");
                       var itemsSerie = itemsExamen[i].getElementsByTagName("serie");
                       for(var j=0,l=itemsSerie.length; j<l; j++){
                         // meme principe pour chaque item de chaque série
      
                       }
      	 }
      

      • Partager sur Facebook
      • Partager sur Twitter
        17 juin 2010 à 14:37:07

        merci pour la réponse mais j'ai un autre soucis. Je récupère bien mon xml et je le vois grâce
        alert(xhr.responseText);
        
        mais lorsque récupère ma balise examen
        var docXmlPatientFolder= xhr.responseXML;
        	alert(xhr.responseText);
        	var itemsExamen = docXmlPatientFolder.getElementsByTagName("examen");
            alert(itemsExamen.length);
        
        le alert(itemsExamen.length) me retourne 0 alors que mon xml m'affiche plusieurs examen.
        • Partager sur Facebook
        • Partager sur Twitter
          17 juin 2010 à 14:55:31

          Hm, p-e ajouter une boucle sur "patient" avant, puis recuperer les fils examen?
          Si tu essayes de faire un :
          alert(docXmlPatientFolder.getElementsByTagName("patient").length);
          

          ca donne quoi?

          Enfin, j'suis pas sur que ce que je t'ai donné comme exemple soit super super, faudrait plutot utiliser des trucs du genre :
          var racine = xml.documentElement;
          alert(racine.nodeName);
          //root
          


          var racine = xml.documentElement;
          var tagnom = racine.getElementsByTagName("nom")
          for(var i = 0; i< tagnom.length; i++){
              var element = racine.childNodes[i];
              alert(element.tagName);
          }
          



          va voir sur cette page, c'est pas mal fait : parcours arbre XML en JS
          • Partager sur Facebook
          • Partager sur Twitter
            17 juin 2010 à 15:11:26

            alert(docXmlPatientFolder.getElementsByTagName("patient").length);
            
            affiche 0. quant à
            var racine = xml.documentElement;
            var tagnom = racine.getElementsByTagName("patient");
             
                for(var i = 0; i< tagnom.length; i++){
                    var element = racine.childNodes[i];
                    alert(element.tagName);
                }
            
            on entre pas dans la boucle puisque tagnom.length vaut 0
            • Partager sur Facebook
            • Partager sur Twitter
              17 juin 2010 à 15:17:31

              alert(docXmlPatientFolder.documentElement.getElementsByTagName("examen").length);
              

              ca donne quoi?

              au passage, je vois que dans ton xml tu as des espaces dans tes balises < examen> ou </ examen> par exemple, essaye de les enlever, ca peut , p-e poser probleme pour certains navigateurs.
              • Partager sur Facebook
              • Partager sur Twitter
                17 juin 2010 à 15:24:30

                hmmm ok,
                donc si tu fais un :
                alert(xhr.respondeText);
                

                ca te renvoie bien ton xml? ( tu peux montrer à quoi il ressemble celui qui est affiché?)

                et:
                var racine = docXmlPatientFolder.documentElement;
                alert(racine.nodeName);
                alert(racine.childNodes.length);
                

                ca t'affiche quoi?




                PS: enleve les espaces dans tes balises XML stp :p
                • Partager sur Facebook
                • Partager sur Twitter
                  17 juin 2010 à 15:35:56

                  alert(xhr.respondeText);
                  
                  m'affiche bien le xml issu du php, par contre firebug me signale une erreur à chaque fois que dans mon xml il y'a un espace exemple
                  <dateExamen>01:03:2010 09:03:01</dateExamen>
                  
                  entre la date et l'heure
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 juin 2010 à 15:37:57

                    tu as la DTD de ton xml sous la main? j'aimerai bien y jeter un oeil :p

                    Mais en effet, un espace peut poser probleme, il te faudra p-e creer deux balises distincte ; une pour la date, l'autre pour l'heure :
                    <dateExamen>
                      <date>aaaa-mm-jj</date>
                      <heure>hh:mm:ss</heure>
                    </dateExamen>
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 juin 2010 à 15:49:27

                      par contre elle est très longue donc je l'ai réduit
                      <examen>
                       <studyInstanceUID>1.2.826.0.1.3680043.2.406.1.2.4256781978.1240.1236514349.360</studyInstanceUID>
                       <dateExamen>2009-01-20 12:24:49</dateExamen>
                      
                       <serie>
                       <code_serie>54</code_serie>
                       <seriesInstanceUID>1.2.826.0.1.3680043.2.406.1.3.4256781978.1240.1236514349.367_.</seriesInstanceUID>
                       <descriptionSerie>COMPOINT^MONIQUE (.)< /descriptionSerie>
                       <modaliteSerie>MR</modaliteSerie>
                       <nbImageSerie>4</nbImageSerie>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514349.368</image>
                      
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514350.369</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514350.370</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514350.371</image>
                       </serie>
                       <serie>
                       <code_serie>26</code_serie>
                       <seriesInstanceUID>1.2.826.0.1.3680043.2.406.1.3.4256781978.1240.1236514349.363_1.1</seriesInstanceUID>
                      
                       <descriptionSerie>SURVEY SBC (1.1)< /descriptionSerie>
                       <modaliteSerie>MR</modaliteSerie>
                       <nbImageSerie>18</nbImageSerie>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1527</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1528</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1529</image>
                      
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1530</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1531</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1532</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1533</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1534</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1535</image>
                      
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1536</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1537</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1538</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514399.1539</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514400.1540</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514400.1541</image>
                      
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514400.1542</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514400.1543</image>
                       <image>1.2.826.0.1.3680043.2.406.1.4.4256781978.1240.1236514400.1544</image>
                       </serie>
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 juin 2010 à 15:53:13

                        Hmm, à mon avis, c'est ton XML qui n'est pas valide, regarde du coté de la generation dans ton script php, y'a quelque chose qui foire :/
                        A voir aussi si le xml generé est en accord avec la DTD correspondante..
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 juin 2010 à 16:03:16

                          je crois que c'est du côté du xml généré puisque lorsque j'en met un en dur exemple
                          echo "<examen> ".ppp."</examen>\r\n ";
                          	echo "<examen> ".pkjhp."</examen>\r\n ";
                          
                          alert(itemsExamen.length);
                          
                          m'affiche bien 2. Je croix que ce sont les espaces dans les données des balises xml qui sont fautif
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 juin 2010 à 16:17:04

                            C'est clair que les espaces , il doit pas aimer, enleve moi tout ca et re tente le coup :b
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 juin 2010 à 16:27:15

                              le problème du xml est résolu c'était juste les espace mais lors que j'entre dans mon premier for de cette fonction
                              function getPatientFolder(xhr)
                              {
                              	// initialisation de la variable globale docXmlPatientFolder par le fichier xml demandé au serveur
                              	var docXmlPatientFolder= xhr.responseXML;
                              	alert(xhr.responseText);
                              	var itemsExamen = docXmlPatientFolder.getElementsByTagName("examen");
                                  alert(itemsExamen.length);
                                  
                               
                               
                               
                              	 for (var i=0;i<itemsExamen.length;i++)
                              	 {
                              		 var itemStudyInstanceUID = itemsExamen[i].getElementsByTagName("studyInstanceUID");
                              		 alert(itemsStudyInstanceUID.item(0).firstChild.data);
                                       var itemDateExam = itemsExamen[i].getElementsByTagName("dateExamen");
                                       var itemsSerie = itemsExamen[i].getElementsByTagName("serie");
                                       
                                       var studyInstanceUID=itemsStudyInstanceUID.item(0).firstChild.data; 
                                       var dateExam=itemDateExam.item(0).firstChild.data; 
                                       
                                       for(var j=0; j<itemsSerie.length; j++)
                                       {
                                         
                                      	 var itemsCodeSerie = docXML.getElementsByTagName("code_serie");
                                      	 var itemsSerieInstanceUID = docXML.getElementsByTagName("serieInstanceUID");
                                      	 var itemsDescription = docXML.getElementsByTagName("descriptionSerie");
                                      	 var itemsModalite = docXML.getElementsByTagName("modaliteSerie");
                                      	 var itemsNbimage= docXML.getElementsByTagName("nbImageSerie");
                                      	 var itemsSOPInstanceUID = docXML.getElementsByTagName("image");
                                      	 
                                      	 var codeSerie=itemsCodeSerie.item(0).firstChild.data;
                                      	 var serieInstanceUID=itemsSerieInstanceUID.item(0).firstChild.data;
                                      	 var description=itemsDescription.item(0).firstChild.data;
                                      	 var modalite=itemsModalite.item(0).firstChild.data;
                                      	 var nbImage=itemsNbimage.item(0).firstChild.data;
                                      	 
                                      	 sopInstanceUID=new Array();//reinitialisation du tableau mi en variable global important car ce tableau peu avoir une taille différente d'une série à une autre
                                      	 for (var k=0;k<itemsSOPInstanceUID.length;k++)
                                      	 {
                                      	// récupération de chaque SOPInstanceUID contenu dans les balises images de la série en cours		
                                      		 sopInstanceUID[k]=itemsSOPInstanceUID.item(k).firstChild.data;
                                      	 }
                                      	 
                                      	// instanciation de la classe Serie
                                     	    serie=new Serie(codeSerie,serieInstanceUID,studyInstanceUID,description, modalite,nbImage,sopInstanceUID );
                                     	    tabSerie[j]=serie;
                                       }
                                          // instanciation de la classe Examen
                                       examen=new Examen(studyInstanceUID, dateExam, tabSerie);
                                       tabExamen[i]=examen;
                              	 }
                              	
                              	   for (var l=0;l<tabExamen.length;l++)
                              		{
                              			
                              			document.getElementById('texte').innerHTML =tabExamen[l].toString();// toString de la classe Examen;
                              			
                              		}	
                              	    
                              	   alert(tabExamen[0].toString());
                              	  
                              }
                              
                              firebug me fait savoir que (itemsStudyInstanceUID)
                              alert(itemsStudyInstanceUID.item(0).firstChild.data);
                              
                              n'est pas défini pourtant le xml dit le contraire.

                              après le nettoyage du xml côté serveur il a juste fallu que je résolve le problème d'orthographe de mes variables qui n'étaient pas toujours écrites pareil.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              extraction xml provenant d'un fichier php

                              × 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