IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Récupération de données d'un flux xml


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 431
    Points : 129
    Points
    129
    Par défaut Récupération de données d'un flux xml
    Bonjour,
    Comme vous pouvez vous en douter, je rencontre un souci.

    Je tiens d'abors a préciser que jai bien farfouiller les divers sujets proposé par ce site concernant les listes liées. Et oui encore (désoler).

    Bref c'est juste un test bateau pour moi, je m'explique je fais des liste liées pour apprendre afin de pouvoir faire des tableau avec filtre ensuite.

    Donc j'ai mes listes comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    <tr>
    	<td width="157">Département :</td>
    	<td width="236">
    		<select name="Departement" id="Departement" onchange="request(this)";>
    			<option value="vide"></option>
    		<?php
                            include 'connect_bdd\connection_BDD.php';
                            $roq = "select * from departement";
                            $rop = mysql_query($roq);
                            while ($ros = mysql_fetch_assoc($rop) )
                            {                                                                                       
                            echo "<option value='".$ros['ID_DEP']."'>".$ros['ID_DEP']." ".$ros['NOM_DEP']."</option>";
                            }
                    ?>
    		</select>
    	</td>
     </tr>
     
    <tr>
    	<td width="236">Ville :</td>
    	<td width="236"> 
    		<select name="Ville" id="Ville">
    		</select> 
    	</td>
     </tr>
    j'envoi bien une variable en POST a ma page php pour faire ma requette dont voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
                    include 'connect_bdd\connection_BDD.php';
                            //$dep = 1;
                            if(isset($_POST['Departement'] ) )//si le departement choisit on va ramonter les villes de ce departement
                            {
                                    $departement = htmlspecialchars($_POST['Departement']);
                                    $req = " SELECT * FROM ville WHERE ID_DEP= '$departement' ";
                                    $rep = mysql_query($req);
                                    
                                    header("Content-Type: text/xml");
                                    
                                    $contenu_xml = '<?xml version="1.0" encoding="UTF-8"?>';
                                    $contenu_xml = $contenu_xml . '<racine>';
                    
                                    while($res = mysql_fetch_assoc($rep) )
                                    { 
                                            //$contenu_xml = $contenu_xml ."<item id=\"".$res['ID_VIL']."\" name=\"".htmlentities($res['NOM_VIL'], ENT_NOQUOTES, "ISO-8859-1")."\" />";
                                            $contenu_xml = $contenu_xml ."<racine>";
                                            $contenu_xml = $contenu_xml ."<numero>".$res['ID_VIL']."</numero> ";
                                            $contenu_xml = $contenu_xml ."<lenom>".$res['NOM_VIL']."</lenom> ";
                                            $contenu_xml = $contenu_xml ."</racine>";
                                    }
     
                                    $contenu_xml = $contenu_xml . '</racine>';
                                    echo $contenu_xml;
                            }
    ?>
    L'opération se passe bien et un flux XML est renvoyé, pour affirmé ceci j'utilise Firefox avec firebug, qui m'affiche tout se qui se passe, le post, le retour xml, etc..

    Bon donc je reçoit bien le flux, seulement, je reçoit un Objet de donnée, j'arrive a compter le nombre d'élément qu'il y a dedans mais je n'arrive pas a extraire les données, c'est a dire avec un simple alert(), j'obtient jamais mes informations, mais juste un objet.
    Et je ne trouve pas de fonction sur internet, même avec mon ami google, pour extraire le contenu de cet objet.
    je vous met mon code javascript qui fait tout cela, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <script type="text/javascript">
    		<!-- 
    			function request(oSelect) 
    			{
    				var value = oSelect.options[oSelect.selectedIndex].value;
    				var xhr   = getXMLHttpRequest();
     
    				xhr.onreadystatechange = function() {
    					if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    						var monXml=xhr.responseXML;
    						readData(monXml);//flux bien arrivée
    					} 
    				};
     
    				xhr.open("POST", "Ajax.php", true);
    				xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    				xhr.send("Departement=" + value);
    			}
     
    			function readData(oData) 
    			{
    				var nodes   = oData.getElementsByTagName("item");
    				//nodes est un objet de donnée
     
     
    				for (var i=0; i<4;i++) {
    					var leId = nodes[i];
    					alert(leId);
    				}
    			}
    		</script>
    Voila je vous remercie par avance des informations que vous pourrez me fournir.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut

    1- Tu as le même nom de tag "racine" parentNode et le childNode
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $contenu_xml = '<?xml version="1.0" encoding="UTF-8"?>';
    				$contenu_xml = $contenu_xml . '<racines>';
    ......
    $contenu_xml = $contenu_xml . '</racines>';
    				echo $contenu_xml;

    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function readData(oData) 
    			{
    				var nodes   = oData.getElementsByTagName("racine");
    				//nodes est un objet de donnée
     
    				var leId ="";
    				for (var i=0; i<nodes.length;i++) {
    					leId = nodes[i].getElementsByTagName("numero")[0].firstChild.nodeValue;
    					alert(leId);
    					leId = nodes[i].getElementsByTagName("lenom")[0].firstChild.nodeValue;
    					alert(leId);
    				}
    			}
    A+.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 431
    Points : 129
    Points
    129
    Par défaut
    Bonjour,

    Merci pour ces informations c'est tres pratique bien que je ne comprend pas bien le cheminement de cette ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    leId = nodes[i].getElementsByTagName("numero")[0].firstChild.nodeValue;
    Pouvez vous me l'expliquer svp?

    En revanche avec ce code, j'ai que le premier numéro et le premier nom qui s'affiche, je devrais avoir tout les id et les noms qui s'affiche grâce a la boucle.

    J'ai essayer de changer le [0] par [i] mais pas de changement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function readData(oData) 
    			{
    				var nodes   = oData.getElementsByTagName("racine");
     
     
    				for (var i=0; i<nodes.length;i++) {
    					leId = nodes[i].getElementsByTagName("numero")[i].firstChild.nodeValue;
    					alert(leId);
    					leNom = nodes[i].getElementsByTagName("lenom")[i].firstChild.nodeValue;
    					alert(leNom);
    				}
    			}
    merci d'avance pour vos précieuse informations.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Re,

    leId = nodes[i].getElementsByTagName("numero")[0].firstChild.nodeValue;
    Récupère la valeur de premier tag numero du nœud racine en cours.

    Fait un alert pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    						alert(xhr.responseText);
    						var monXml=xhr.responseXML;
    						readData(monXml);//flux bien arrivée
    					}
    A+.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 431
    Points : 129
    Points
    129
    Par défaut
    Merci pour cette information cependant votre première réponse me permettais d'afficher uniquement les donnée enfin le premier numéro et la première ville.

    Et votre seconde réponse m'affiche l'intégralité, les noeuds y compris.
    je ne désire pas avoir les noeuds, faire comme votre première réponse permet de faire, mais avec toutes mes données, en parcourant noeud par noeuds.

    Avec c'est données je vais reconstituer du html, un select ou un tableau peut importe.

    Merci d'avance et désoler d’être pointilleux.

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Fait un alert pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    						alert(xhr.responseText);
    						var monXml=xhr.responseXML;
    						readData(monXml);//flux bien arrivée
    					}
    A+.
    Et montre nous ce qu'il affiche.

    A+.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 431
    Points : 129
    Points
    129
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version="1.0" encoding="UTF-8"?><racine><numero>1218</numero> <lenom>Abrest</lenom> <numero>1219</numero> <lenom>Agonges</lenom> <numero>1220</numero> <lenom>Ainay-le-Ch?teau</lenom> <numero>1221</numero> <lenom>Andelaroche</lenom> <numero>1222</numero> <lenom>Archignat</lenom> <numero>1223</numero> <lenom>Arfeuilles</lenom> <numero>1224</numero> <lenom>Arpheuilles-Saint-Priest</lenom> <numero>1225</numero> <lenom>Arronnes</lenom> <numero>1226</numero> <lenom>Aubigny</lenom> <numero>1227</numero> <lenom>Audes</lenom> <numero>1228</numero> <lenom>Aurou</lenom> <numero>1229</numero> <lenom>Autry-Issards</lenom> <numero>1230</numero> <lenom>Avermes</lenom> 
    etc........

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Tu n'as pas compris mon précédent post alors.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    		include 'connect_bdd\connection_BDD.php';
    			//$dep = 1;
    			if(isset($_POST['Departement'] ) )//si le departement choisit on va ramonter les villes de ce departement
    			{
    				$departement = htmlspecialchars($_POST['Departement']);
    				$req = " SELECT * FROM ville WHERE ID_DEP= '$departement' ";
    				$rep = mysql_query($req);
     
    				header("Content-Type: text/xml");
     
    				$contenu_xml = '<?xml version="1.0" encoding="UTF-8"?>';
    				$contenu_xml = $contenu_xml . '<racines>';
     
    				while($res = mysql_fetch_assoc($rep) )
    				{ 
    					//$contenu_xml = $contenu_xml ."<item id=\"".$res['ID_VIL']."\" name=\"".htmlentities($res['NOM_VIL'], ENT_NOQUOTES, "ISO-8859-1")."\" />";
    					$contenu_xml = $contenu_xml ."<racine>";
    					$contenu_xml = $contenu_xml ."<numero>".$res['ID_VIL']."</numero> ";
    					$contenu_xml = $contenu_xml ."<lenom>".$res['NOM_VIL']."</lenom> ";
    					$contenu_xml = $contenu_xml ."</racine>";
    				}
     
    				$contenu_xml = $contenu_xml . '</racines>';
    				echo $contenu_xml;
    			}
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function readData(oData) 
    			{
    				var nodes   = oData.getElementsByTagName("racine");
     
     
    				for (var i=0; i<nodes.length;i++) {
    					leId = nodes[i].getElementsByTagName("numero")[i].firstChild.nodeValue;
    					alert(leId);
    					leNom = nodes[i].getElementsByTagName("lenom")[i].firstChild.nodeValue;
    					alert(leNom);
    				}
    			}
    A+.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 431
    Points : 129
    Points
    129
    Par défaut
    Merci cela fonctionne avec ce que vous m'avez dis je remontre mon code final pour ceux que cela peut intéresser .

    php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    header("Content-Type: text/xml");
     
    				$contenu_xml = '<?xml version="1.0" encoding="UTF-8"?>';
    				$contenu_xml = $contenu_xml . '<racine>';
     
    				while($res = mysql_fetch_assoc($rep) )
    				{ 
    					//$contenu_xml = $contenu_xml ."<item id=\"".$res['ID_VIL']."\" name=\"".htmlentities($res['NOM_VIL'], ENT_NOQUOTES, "ISO-8859-1")."\" />";
    					$contenu_xml = $contenu_xml ."<noeud>";
    					$contenu_xml = $contenu_xml ."<numero>".$res['ID_VIL']."</numero> ";
    					$contenu_xml = $contenu_xml ."<lenom>".$res['NOM_VIL']."</lenom> ";
    					$contenu_xml = $contenu_xml ."</noeud>";
    				}
     
    				$contenu_xml = $contenu_xml . '</racine>';
    				echo $contenu_xml;
    			}
    et la partie javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    function request(oSelect) 
    			{
    				var value = oSelect.options[oSelect.selectedIndex].value;
    				var xhr   = getXMLHttpRequest();
     
    				xhr.onreadystatechange = function() {
    					if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    						//alert(xhr.responseText);
    						var monXml=xhr.responseXML;
    						readData(monXml);
    					} 
    				};
     
    				xhr.open("POST", "Ajax.php", true);
    				xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    				xhr.send("Departement=" + value);
    			}
     
    			function readData(oData) 
    			{
    				var nodes   = oData.getElementsByTagName("noeud");
     
    				alert("long" + nodes.length);
    				for (var i=0; i<3;i++) {//nodes.length
    					leId = nodes[i].getElementsByTagName("numero")[0].firstChild.nodeValue;
    					alert(leId);
    					leNom = nodes[i].getElementsByTagName("lenom")[0].firstChild.nodeValue;
    					alert(leNom);
    				}
    			}


    Merci pour cette aide bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération de données dans un fichier XML pour une utilisation dans une servlet
    Par Dredd619 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 24/04/2009, 08h41
  2. Réponses: 7
    Dernier message: 27/02/2009, 16h17
  3. récupération des données d'un fichier xml ?
    Par sarapis dans le forum Flex
    Réponses: 2
    Dernier message: 10/02/2009, 11h40
  4. Ecrire des donnes dans un flux xml
    Par jul-974 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/06/2007, 01h48
  5. [DOM XML] Récupération des attributs dans un flux xml
    Par opeo dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 11/04/2007, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo