begin process at 2012 05 28 23:08:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Faut il un parseur XML ou tout réécrire ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Faut il un parseur XML ou tout réécrire ?

vendredi 15 janvier 2010 à 09:27:35 | Faut il un parseur XML ou tout réécrire ?

slhuilli

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 :

<xml_api_reply version="1">
&#8722;
<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
&#8722;
<forecast_information>
<city data="Nancy, Lorraine"/>
<postal_code data="nancy"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2010-01-15"/>
<current_date_time data="2010-01-15 07:00:00 +0000"/>
<unit_system data="SI"/>
</forecast_information>
&#8722;
<current_conditions>
<condition data="Ciel nuageux"/>
<temp_f data="34"/>
<temp_c data="1"/>
<humidity data="Humidité : 87 %"/>
<icon data="/ig/images/weather/cloudy.gif"/>
<wind_condition data="Vent : E à 2 km/h"/>
</current_conditions>
....
</weather>
</xml_api_reply>


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 <balise>DONNEES</balise>.
En fait, généralement on a <balise>DONNEES</balise> 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 ?

Merci de votre aide


vendredi 15 janvier 2010 à 10:57:05 | Re : Faut il un parseur XML ou tout réécrire ?

pysco68

Réponse acceptée !
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:

j'ai trouvé ce petit tuto (en anglais): http://www.electrictoolbox.com/php-simplexml-element-attributes/

J'espère que ça t'aide!

Bonne journée
- Pysco68
vendredi 15 janvier 2010 à 13:19:35 | Re : Faut il un parseur XML ou tout réécrire ?

slhuilli

ouais... mais j'ai du mal !
<?php

$xml = "http://www.google.com/ig/api?weather=nancy&hl=fr";
$xmlobj = new SimpleXMLElement($xml);
$xmlobj->items->item[0]->forecast_information->city()->data;

?>


ce qui me donne


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]: http://www.google.com/ig/api?weather=nancy&hl=fr 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
vendredi 15 janvier 2010 à 13:25:37 | Re : Faut il un parseur XML ou tout réécrire ?

pysco68

Dans l'exemple ils ne changent pas un fichier xml depuis une source externe, mais l'intègrent en dur à peux code source.

Avec file_get_contents() [http://fr.php.net/manual/en/function.file-get-contents.php] tu devrais arriver à tes fins!


- Pysco68
vendredi 15 janvier 2010 à 13:41:13 | Re : Faut il un parseur XML ou tout réécrire ?

slhuilli

J'avais pas pensé a ca effectivement, je regarde. mais voila, pas bcp mieux !
<?php


$string = "http://www.google.com/ig/api?weather=nancy&hl=fr";
$xml = file_get_contents($string);
foreach($xml->weather->forecast_information->postal_code()->data as $a => $b) {
echo $a,'="',$b,"\"\n";
}


?>


et j'obtiens
Fatal error: Call to a member function postal_code() on a non-object in /googleWeather/GWeather.php5 on line 6

Les () servent a koi ?
vendredi 15 janvier 2010 à 15:19:53 | Re : Faut il un parseur XML ou tout réécrire ?

pysco68

Tu t'en approche!

$xmlobj = new SimpleXMLElement($xml);
est toujours encore nécessaire!!! Il fut quand même encore parser le XML que tu télécharge :P

Allé, t'y est presque!


- Pysco68
samedi 16 janvier 2010 à 18:37:59 | Re : Faut il un parseur XML ou tout réécrire ?

slhuilli

<?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 ?
samedi 16 janvier 2010 à 18:42:29 | Re : Faut il un parseur XML ou tout réécrire ?

pysco68

Bonne supposition, enfait c'est le flux XML dont l'encodage UTF8 est un peux abimé (d'ou les séquences hexa), essai voir avec ca:

$xml = iconv("UTF-8","UTF-8//IGNORE",$xml);




- Pysco68
samedi 16 janvier 2010 à 19:00:13 | Re : Faut il un parseur XML ou tout réécrire ?

slhuilli

C'est au bon endroit iConv là ?

<?php
$string = "http://www.google.com/ig/api?weather=nancy&hl=fr";
$xml = file_get_contents($string);
$xml = iconv("UTF-8","UTF-8//IGNORE",$xml);
$xmlobj = new SimpleXMLElement($xml);
foreach($xml->weather->forecast_information->postal_code()->data as $a => $b) {
echo $a,'="',$b,"\"\n";
}

?>

ca a l'air bien, je n'ai plus qu'une erreur :
Fatal error: Call to a member function postal_code() on a non-object in /meteo_test.php5 on line 6

Il ne veux ps me sortir Postal_code qui nn'est qu'une propriété a sortir parmi tant d'autres ....
samedi 16 janvier 2010 à 19:05:38 | Re : Faut il un parseur XML ou tout réécrire ?

slhuilli

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 !

<?php
$string = "http://www.google.com/ig/api?weather=nancy&hl=fr";
$xml = file_get_contents($string);
$xml = iconv("UTF-8","UTF-8//IGNORE",$xml);
$xmlobj = new SimpleXMLElement($xml);
foreach($xmlobj->weather->forecast_information->postal_code->data as $a => $b) {
echo $a,'="',$b,"\"\n";
}

?>

1 2 3

Cette discussion est classée dans : récupérer, flux, xml, parseur, réécrire


Répondre à ce message

Sujets en rapport avec ce message

Récupération de flux xml [ par 69loic69 ] Bonjour,Dans le cadre d'une application, je dois récupérer des infos sur une page php qui génère automatiquement un affichage sous forme XML de ce typ probleme de flux xml [ par stomy95 ] Bonjour ,j'ai un souci pour afficher du flux xml  après 2 jours de recherche j'ai toujours pas résolu mon problème sa m'affiche cette phrase :Ce fichi Récupérer le contenu d'une requête POST contenant du XML [ par rt15 ] Salut, J'ai une page Web AJAX qui envoie une requête POST. Cette requête POST contient du xml (Son Content-Type est text/xml quoi). Voilà grosso modo Parseur Xml StAX [ par anisis ] Bonjour tt le monde,En fait mon prblm c'est que je reçois des fichiers xml de grandes tailles et je dois les parser , Maintenant je suis entrain d'uti widget+rss+php [ par lsamsoumal ] Bonjour tt le monde: j'ai un code php qui génére un fichier xml contenant des flux rss.Maintenant je veut developper un widget qui récupére les flux r widget avec flux rss [ par pandouta08 ] j'ai un code php d'un générateur d'un fichier xml contenant un ensemble de lien et j'ai un widget yahoo que j'ai créé ,je veux que mon widget yahoo af Timeout flux XML [ par FhX ] Bon, petit problème avec les flux XML récupéré via simpleXML en PHP5. Comment on défini un timeout sur ce machin ? Parce que j'ai beau essayer avec le xml et fusionchart [ par yatoo ] Bonjour à tous , Je vous contact car j'aimerais créer un graphique avec mon flux xml et fusionchart.( http://www.fusioncharts.com/ ) Mon flux se com parser un flux xml provenant d'une url [ par christobal ] bonjour, j'utilise le service de www.ipinfodb.com pour me retourner en xml certain infos du visiteur : http://www.ipinfodb.com/ip_query.php?ip=votre_a Webservices / flux de données/ API/ XML - Football [ par contactbleu ] Hello, Je suis à la recherche d'un web-services me permetant d'afficher les scores de foot du mondial (World Cup) 2010. Qui a des idées ou des info


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales