Page 1 sur 1

Premiers pas avec xml

Posté : 17 déc. 2009, 17:48
par jojo1000
Bonjour j'ai un fichier xml dont je voudrais récupérer les données dans des variables php. La structure du fichier ressemble à ceci:

Code : Tout sélectionner

<BIEN> <CODE_CLIENT></CODE_CLIENT> <TYPE_OFFRE>5</TYPE_OFFRE> <CODE_SOCIETE>6358</CODE_SOCIETE> <CODE_SITE>01</CODE_SITE> <NO_ASP>2307141</NO_ASP> <NO_DOSSIER>00194</NO_DOSSIER> <DATE_OFFRE>04/09/2007</DATE_OFFRE> <PRIX>300000</PRIX> <CP_OFFRE>92400</CP_OFFRE> <VILLE_OFFRE>COURBEVOIE</VILLE_OFFRE> <QUARTIER></QUARTIER> <SECTEUR>Courbevoie</SECTEUR> <CATEGORIE>LOCAL INDUST. / ACTIVITES</CATEGORIE> <NB_PIECES></NB_PIECES> <NB_CHAMBRES></NB_CHAMBRES> <SURF_HAB>225</SURF_HAB> <SURF_TERRAIN></SURF_TERRAIN> <NB_ETAGES>0</NB_ETAGES> </BIEN>
Sachant qu'il y a beaucoup de balise BIEN.
Je ne sais pas du tout comment faire pour récupèrer les données.
Quelqu'un peut m'aider svp. 8-| .Merci d'avance

Re: Premiers pas avec xml

Posté : 17 déc. 2009, 17:54
par Yosh

Re: Premiers pas avec xml

Posté : 21 déc. 2009, 01:37
par @rthur
Bonjour,

Voici un exemple avec simpleXML:
<?php
$url_fichier_xml="http://www.domaine.com/fichier.xml"; // Peut être une url ou un chemin relatif
$xml=simplexml_load_file($url);

foreach($xml->bien as $bien) {
     // On boucle sur chaque bien...
     print ($bien->VILLE_OFFRE)." : ".($bien->PRIX)." Euros <br />";
}
?>
A toi d'adapter cet exemple pour en faire ce que tu veux :)

Re: Premiers pas avec xml

Posté : 21 déc. 2009, 13:33
par jojo1000
Merci beaucoup @rthur, tout marche nickel, je peux récupérer toutes les informations! :D

EDIT: Bon non, tout ne marche pas nickel, à l'intérieur de mon foreach je fais une autre boucle à partir d'un mysql_fetch_object contenant 300 enregistrements; mais cette boucle ne s'effectue q'une fois.
foreach($xml->BIEN as $bien) {
		while($entre = mysql_fetch_object($exec))
		{
		if($entre->BIEN_NUM_ASP == $bien->NO_ASP && ($bien->QUARTIER!="" && substr($bien->CP_OFFRE,0,2) == '75'))
		{
				$req = "select LOCAL_ID,LOCAL_QUARTIER,LOCAL_VILLE from localisation where LOCAL_CP =".$bien->CP_OFFRE." and LOCAL_QUARTIER = ".$bien->QUARTIER;
				$exec = mysql_query($req) or die("erreur dans la requete($req)");
				$tab = mysql_fetch_object($exec);
				while($sql = $tab)
				{
					echo $tab->LOCAL_ID.' '.$tab->LOCAL_QUARTIER.' '.$tab->LOCAL_VILLE;
				}
		}
		else if($entre->BIEN_NUM_ASP == $bien->NO_ASP) 
		{
			$req = 	"select LOCAL_ID,LOCAL_VILLE from localisation where LOCAL_CP =".$bien->CP_OFFRE." AND LOCAL_QUARTIER = ''";
			$exec = mysql_query($req) or die("erreur dans la requete($req)");
			while($sql = mysql_fetch_object($exec))
				{
					echo $entre->LOCAL_ID;	
				}		}	}
Pourquoi ma boucle ne se fait-elle qu'une seul fois?

Re: Premiers pas avec xml

Posté : 22 déc. 2009, 13:38
par jojo1000
Excusez-moi, je souhaite faire une recherche dans une base de données Mysql à partir d'informations xml.
Je veux que chaque donnée de chaque ligne soit comparé à toute une colonne d'une table.
J'utilise donc un simpleparse_load_file sur lequel je fais un foreach sur une balise. A l'intérieur de ce foreach je construis une autre boucle sur le tableau des élèments de ma requête. Mais cette boucle ne s'execute qu'une seule fois. En revanche le fichier xml est lu en entier. Mon code:

Code : Tout sélectionner

foreach($xml->BIEN as $bien) { while($entre = mysql_fetch_object($exec)) { if($entre->BIEN_NUM_ASP == $bien->NO_ASP && ($bien->QUARTIER!="" && substr($bien->CP_OFFRE,0,2) == '75')) { $req = "select LOCAL_ID,LOCAL_QUARTIER,LOCAL_VILLE from localisation where LOCAL_CP =".$bien->CP_OFFRE." and LOCAL_QUARTIER = ".$bien->QUARTIER; $exec = mysql_query($req) or die("erreur dans la requete($req)"); $tab = mysql_fetch_object($exec); while($sql = $tab) { echo $tab->LOCAL_ID.' '.$tab->LOCAL_QUARTIER.' '.$tab->LOCAL_VILLE; } } else if($entre->BIEN_NUM_ASP == $bien->NO_ASP) { $req = "select LOCAL_ID,LOCAL_VILLE from localisation where LOCAL_CP =".$bien->CP_OFFRE." AND LOCAL_QUARTIER = ''"; $exec = mysql_query($req) or die("erreur dans la requete($req)"); while($sql = mysql_fetch_object($exec)) { echo $entre->LOCAL_ID; } } }

Re: Premiers pas avec xml

Posté : 22 déc. 2009, 15:21
par zeus
Modération :
Les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Merci de prendre le temps de lire les règlements.

Re: Premiers pas avec xml

Posté : 22 déc. 2009, 16:23
par macgawel
1. Il manque une accolade à la fin de ton code pour fermer le foreach (mais c'est certainement juste une erreur de recopie).

2. Je n'ai jamais testé donc je ne garantis pas que le problème vient de là. Mais tu lances des requêtes dans ta boucle, et tu les récupères toujours dans la même variable $exec. Du coup, le $exec sur lequel tu fais le fetch au deuxième passage n'est plus le même qu'au premier...
Tu peux tester vite fait en utilisant des variables distinctes pour chaque requête.

Re: Premiers pas avec xml

Posté : 22 déc. 2009, 16:28
par jojo1000
MacGawel, tu es mon sauveur; enfin presque, qu'on me file la bonne réponse comme ça et que tout marche... et ben non, j'ai encore des problèmes.
Merci, déjà j'ai changé le nom des $exec et on passe dans la deuxième boucle.
Par contre, on passe pas dans les boucles du if.
Je m'y attèle, mais je n'ai rien contre de l'aide.

Re: Premiers pas avec xml

Posté : 22 déc. 2009, 16:59
par macgawel
Règle numéro un pour débugger un script : étudier le contenu des variables.

Avant de faire tes tests, commence par regarder ce qu'il y a dans tes variables ($entre et $bien). Parce qu e si ça ne passe pas dans tes IF, et qu'il n'y a pas de message d'erreur, c'est certainement que $entre->BIEN_NUM_ASP != $bien->NO_ASP...

Re: Premiers pas avec xml

Posté : 22 déc. 2009, 17:06
par jojo1000
=P~ Merci Macgawel, en fait après

Code : Tout sélectionner

while($entre = mysql_fetch_array($exec))
j'ai ajouté :

Code : Tout sélectionner

$requete ="select * from biens"; $exec = mysql_query($requete) or die("erreur dans ma requête");
Et ça roule. Merci pour ton aide prècieuse. =D>