Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/03/2011, 10h45   #1
Membre du Club
 
Inscription : septembre 2009
Messages : 314
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 314
Points : 46
Points : 46
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 :
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 :
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 :
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.
darkterreur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 11h34   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270

1- Tu as le même nom de tag "racine" parentNode et le childNode
Code php :
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 :
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 12h14   #3
Membre du Club
 
Inscription : septembre 2009
Messages : 314
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 314
Points : 46
Points : 46
Bonjour,

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

Code :
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 :
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.
darkterreur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 16h42   #4
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Re,

Citation:
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 :
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 17h57   #5
Membre du Club
 
Inscription : septembre 2009
Messages : 314
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 314
Points : 46
Points : 46
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.
darkterreur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 18h26   #6
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Citation:
Envoyé par andry.aime Voir le message
Fait un alert pour voir
Code :
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 19h25   #7
Membre du Club
 
Inscription : septembre 2009
Messages : 314
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 314
Points : 46
Points : 46
Code :
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........
darkterreur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 19h31   #8
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Tu n'as pas compris mon précédent post alors.
Code php :
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 :
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 09h33   #9
Membre du Club
 
Inscription : septembre 2009
Messages : 314
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 314
Points : 46
Points : 46
Merci cela fonctionne avec ce que vous m'avez dis je remontre mon code final pour ceux que cela peut intéresser .

php:
Code :
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 :
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.
darkterreur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h23.


 
 
 
 
Partenaires

Hébergement Web