Alainp Posté 13 Novembre 2011 Posté 13 Novembre 2011 Bonjour, Je sais que vous n'aimez pas trop donner des solutions toutes faites mais çà fait plusieurs jours que je cherche comment récupérer deux valeurs dans un fichier XML et je capitule. Voici le fichier <?xml version="1.0" ?> - <weatherdata>- <weather weatherlocationcode="wc:FRXX0016" weatherlocationname="Bordeaux, Gironde" zipcode="33300" encodedlocationname="Bordeaux%2c+Gironde" url="http://meteo.msn.com/local.aspx?wealocations=wc:FRXX0016&q=Bordeaux%2c+Gironde" imagerelativeurl="http://blst.msn.com/as/wea3/i/fr/" degreetype="C" provider="Foreca" attribution="Données fournies par Foreca" attribution2="© Foreca" lat="44.8557549" long="-0.5782283" timezone="1" alert="" entityid="4486"> <current temperature="19" skycode="32" skytext="Clair" date="2011-11-13" day="dimanche" shortday="dim." observationtime="17:00:00" observationpoint="Bordeaux / Merignac" feelslike="19" humidity="68" windspeed="15" winddisplay="15 km/h ESE" /> <forecast low="13" high="20" skycodeday="30" skytextday="En partie nuageux" date="2011-11-13" day="dimanche" shortday="dim." precip="5" /> <forecast low="11" high="19" skycodeday="30" skytextday="En partie nuageux" date="2011-11-14" day="lundi" shortday="lun." precip="5" /> <forecast low="10" high="15" skycodeday="39" skytextday="Averses / Temps clair" date="2011-11-15" day="mardi" shortday="mar." precip="95" /> <forecast low="8" high="16" skycodeday="30" skytextday="En partie nuageux" date="2011-11-16" day="mercredi" shortday="mer." precip="20" /> <forecast low="7" high="17" skycodeday="30" skytextday="En partie nuageux" date="2011-11-17" day="jeudi" shortday="jeu." precip="5" /> <toolbar timewindow="60" minversion="1.0.1965.0" /> </weather> </weatherdata> et je voudrai récupérer la valeurs des champs lat et long pour les afficher dans mon script PHP lat="44.8557549" long="-0.5782283" J'arrive à peu près à extraire des données lorsqu'il y a des balises ouvrantes et fermantes mais là, il n'y en a pas pour ces deux champs. Merci par avance si vous pouvez m'aider
jcaron Posté 13 Novembre 2011 Posté 13 Novembre 2011 Plusieurs méthodes: - méthode bourrin avec une regex: preg_match('/lat="([-0-9.]+)" long="([-0-9.]+)"/',$string,$matches) - méthode je lis du XML, ça va dépendre de ce que tu utilises (XML Parser, SimpleXML...). En supposant que tu utilises SimpleXML: $xml = simplexml_load_string($string);$lat = (string)$xml->weather[0]->attributes()->lat;$long = (string)$xml->weather[0]->attributes()->long; (je n'ai rien testé, mais ça ne doit pas être très loin) Jacques.
Alainp Posté 14 Novembre 2011 Auteur Posté 14 Novembre 2011 (modifié) - méthode je lis du XML, ça va dépendre de ce que tu utilises (XML Parser, SimpleXML...). En supposant que tu utilises SimpleXML: Bonjour jcaron et merci Malheureusement sur mon hébergement mutualisé, je n'ai pas SimpleXML. Jusqu'à présent, je prenais des bouts de code trouvés sur le net et que je modifiais pour traiter les fichiers xml avec des fonctions du style lit_xml(). Je regarde la méthode bourrin. Résultat: Depuis ce matin, je me bagarre avec la méthode "bourin" mais en vain, aucun résultat J'appelle l'url du fichier xml en guise de $string mais rien après traitement Je continue de chercher comment extraire ces 2 champs lat et long Merci quand même Modifié 14 Novembre 2011 par Alainp
Leonick Posté 14 Novembre 2011 Posté 14 Novembre 2011 pense à ajouter l'option multilignes pour ton regex
Alainp Posté 15 Novembre 2011 Auteur Posté 15 Novembre 2011 pense à ajouter l'option multilignes pour ton regex Merci mais dans ce domaine, je suis complètement nul Je continue mes recherches pour trouver un bout de script qui exploite le fichier xml de msn
Alainp Posté 16 Novembre 2011 Auteur Posté 16 Novembre 2011 regarde s'ils ne proposent pas d'api En fait, j'ai une base de données de plus de 50.000 villes dans le monde pour lesquelles je souhaite rajouter la latitude et la longitude pour chacune de ces villes. Il n'y a que dans le fichier xml de msn météo que j'ai trouvé les codes de mes villes avec en parallèle, la latitude et la longitude C'est pour cette raison que je cherche à extraire ces 2 champs de leur fichier xml sans avoir à le faire à la main vu la quantité de villes de ma base.
captain_torche Posté 16 Novembre 2011 Posté 16 Novembre 2011 Pourquoi ne pas utiliser l'API de Google Maps (Ou toute autre API similaire) ? Ça me semblerait pourtant plus indiqué.
jcaron Posté 16 Novembre 2011 Posté 16 Novembre 2011 Ah, je n'avais pas vu ça: J'appelle l'url du fichier xml en guise de $string mais rien après traitement Ah ben non, tu dois passer le XML que tu reçois (via un file_get_contents par exemple), pas l'URL... Jacques.
Alainp Posté 16 Novembre 2011 Auteur Posté 16 Novembre 2011 Pourquoi ne pas utiliser l'API de Google Maps (Ou toute autre API similaire) ? Ça me semblerait pourtant plus indiqué. Depuis plusieurs années, j'utilisais les données fournies dans un fichier xml par un service météo. Ce dernier vient de remplacer l'accès gratuit par un accès payant (plus de 200$ par mois si je veux les mêmes données). Résultat, je dois changer de fournisseur mais comme toutes mes pages sont référencées avec le code des villes et que le nouveau service que j'ai trouvé utilise la latitude et la longitude, je vais arranger mon script pour continuer d'utiliser le code ville. Après recherche, seul le fichier xml de MSN permet d'avoir la correspondance code ville et latitude/longitude d'où mon besoin d'extraire ces deux champs de leur fichier xml et je n'y arrive toujours pas!
Alainp Posté 16 Novembre 2011 Auteur Posté 16 Novembre 2011 Ah ben non, tu dois passer le XML que tu reçois (via un file_get_contents par exemple), pas l'URL... Merci jcaron, j'ai l'impression d'avoir un peu avancé avec cette idée. En utilisant un file_get_contents + ta méthode "bourrin" sur le fichier xml mentionné dans mon premier post , voila ce que j'obtiens lat="44.8557549" long="-0.5782283"44.8557549 C'est déjà un premier pas mais comment je peux conserver uniquement 44.8557549 et -0.5782283 Merci
Alainp Posté 16 Novembre 2011 Auteur Posté 16 Novembre 2011 $matches[0] -> lat $matches[1] -> long Jacques. C'est ce que j'ai fait : $page = file_get_contents('http://weather.service.msn.com/data.aspx?s&weadegreetype=C&culture=fr-fr&wealocations=wc:FRXX0016');preg_match('/lat="([-0-9.]+)" long="([-0-9.]+)"/',$page,$matches);echo $matches[0];echo $matches[1]; echo $matches[0]; donne lat="44.8557549" echo $matches[1]; donne long="-0.5782283"44.8557549 D'ailleurs, je ne comprends pas que 44.8557549 soit collé derrière long="-0.5782283"
Leonick Posté 16 Novembre 2011 Posté 16 Novembre 2011 j'aurais échappé le . dans le [] sinon ça représente n'importe quel caractère
jcaron Posté 16 Novembre 2011 Posté 16 Novembre 2011 Non, pas à l'intérieur de []. Petite erreur de ma part, c'est $matches[1] et [2]. $matches[0] contient l'ensemble de ce qui a "matché", [1] et suivants chacune des expressions entre (). Jacques.
Alainp Posté 16 Novembre 2011 Auteur Posté 16 Novembre 2011 Un grand merci Jacques, c'est impeccable Cà faisait des jours que j'étais la dessus Bonne soirée
captain_torche Posté 16 Novembre 2011 Posté 16 Novembre 2011 Pour info, $matches[0] récupérait en fait toute la chaîne lat="44.8557549" long="-0.5782283", alors que $matches[1] donnait la valeur de latitude. C'est pour ça que tu t'étonnais de les voir attachées.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant