Utilisateur anonyme
-
15 janv. 2010 à 09:27
Utilisateur anonyme -
16 janv. 2010 à 21:44
Bonjour,
Je bosse sur un flux XML que je trouve très bizarre (mais c'est peut etre moi qui me trompe !). Ce flux est généré par google meteo. Je vous en livre une partie :
<wind_condition data="Vent : E à 2 km/h"/>
</current_conditions>
....
</weather>
</xml_api_reply>/i
J'aimerais simplement savoir s'il est possible de récupérer facilement les éléments "paramètres" QUI SONT EN FAIT DANS les balises XML (a l'interieur de < et > (c'est justement ca qui me gene) et non tels que DONNEES.
En fait, généralement on a DONNEES et là avec simpleXML j'arrive a récupérer les données. Dans le cas précis du flux copié-collé, y a t il une solution pour récupérer ces paramètres (avec simpleXML ou une autre bibliothèque) ou faut il écrire un parseur propre a ce flux ?
pysco68
Messages postés681Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention21 août 20148 15 janv. 2010 à 10:57
Bonjour,
enfait il faut que tu accède à un attribut d'un élément (par exemple l'attribut "data" de l'élément "humidity") ce qui est facilement faisable à l'aide de SimpleXML par exemple:
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found in /googleWeather/GWeather.php5 on line 4
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: ^ in /googleWeather/GWeather.php5 on line 4
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /googleWeather/GWeather.php5:4 Stack trace: #0 /googleWeather/GWeather.php5(4): SimpleXMLElement->__construct('http://www.goog...') #1 {main} thrown in /googleWeather/GWeather.php5 on line 4
<?php
$string = "http://www.google.com/ig/api?weather=nancy&hl=fr";
$xml = file_get_contents($string);
$xmlobj = new SimpleXMLElement($xml);
foreach($xml->weather->forecast_information->postal_code()->data as $a => $b) {
echo $a,'="',$b,""\n";
}
?>
Et là j'ai
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xE9 0x20 0x3A 0x20 in /meteo_test.php5 on line 4
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: <condition data=""/><temp_f data="37"/><temp_c data="3"/><humidity data="Humidit in /meteo_test.php5 on line 4
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: ^ in /meteo_test.php5 on line 4
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /meteo_test.php5:4 Stack trace: #0 /meteo_test.php5(4): SimpleXMLElement->__construct('<?xml version="...') #1 {main} thrown in /meteo_test.php5 on line 4
Je suppose que ce n'est plus qu'un probleme d'encodage du flux de départ ?
en rajoutant un UTF8_encode avant file_get_content, j'ai effectivement pas mal de messages d'erreurs de disparus !
Il m'a mis une erreur sur postaal_code() ce que je comprends puisque postalçconde n'est pas une fonction mais une des proprietes du flux
Je dosi rebooter, j'arrive pu a me logger au FTP.... J'ai des connexions penndantes restées ouevrtes !
maintenant un autre truc me chiffonne : dans la boucle foreach, on ne recupere qu'une propriete. Mais j'ai besoin de refaire uen autre boucle pour les autres propriete ou le peux utiliser la meme et faisant par exemple :