Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1617 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec SimpleXML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec SimpleXML

n°2027178
Alekusu2
Posté le 05-10-2010 à 22:28:10  profilanswer
 

Bonjour à tous  :hello:  :hello:  
 
J'ai un souci avec SimpleXML.
 
Voici mon flux XML :  
 

Code :
  1. <rss version="2.0" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  2. <channel>
  3.  <title>Yahoo! Weather - Ho Chi Minh City, VM</title>
  4.  <link>http://us.rd.yahoo.com/dailynews/rss/weather/Ho_Chi_Minh_City__VM/*http://weather.yahoo.com/forecast/VMXX0007_c.html</link>
  5.  <description>Yahoo! Weather for Ho Chi Minh City, VM</description>
  6.  <language>en-us</language>
  7.  <lastBuildDate>Tue, 05 Oct 2010 10:30 pm ICT</lastBuildDate>
  8.  <ttl>60</ttl>
  9.  <yweather:location city="Ho Chi Minh City" region=""   country="VM"/>
  10.  <yweather:units temperature="C" distance="km" pressure="mb" speed="km/h"/>
  11.  <yweather:wind chill="24"   direction="0"   speed="1.61" />
  12.  <yweather:atmosphere humidity="100"  visibility="6"  pressure="982.05"  rising="2" />
  13.  <yweather:astronomy sunrise="5:42 am"   sunset="5:41 pm"/>
  14.  
  15.  <image>
  16.   <title>Yahoo! Weather</title>
  17.   <width>142</width>
  18.   <height>18</height>
  19.   <link>http://weather.yahoo.com</link>
  20.   <url>http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif</url>
  21.  </image>
  22.  <item>
  23.   <title>Conditions for Ho Chi Minh City, VM at 10:30 pm ICT</title>
  24.   <geo:lat>10.82</geo:lat>
  25.   <geo:long>106.67</geo:long>
  26.   <link>http://us.rd.yahoo.com/dailynews/rss/weather/Ho_Chi_Minh_City__VM/*http://weather.yahoo.com/forecast/VMXX0007_c.html</link>
  27.   <pubDate>Tue, 05 Oct 2010 10:30 pm ICT</pubDate>
  28.   <yweather:condition  text="Light Rain"  code="11"  temp="24"  date="Tue, 05 Oct 2010 10:30 pm ICT" />
  29.    
  30.   <description>
  31.    <![CDATA[
  32.    <img src="http://l.yimg.com/a/i/us/we/52/11.gif"/><br />
  33.    <b>Current Conditions:</b><br />
  34.    Light Rain, 24 C<BR />
  35.    <BR /><b>Forecast:</b><BR />
  36.    Tue - Scattered Thunderstorms. High: 31 Low: 23<br />
  37.    Wed - Scattered Thunderstorms. High: 31 Low: 23<br />
  38.    <br />
  39.    <a href="http://us.rd.yahoo.com/dailynews/rss/weather/Ho_Chi_Minh_City__VM/*http://weather.yahoo.com/forecast/VMXX0007_c.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>
  40.    (provided by <a href="http://www.weather.com" >The Weather Channel</a> )<br/>
  41.    ]]>
  42.   </description>
  43.    
  44.   <yweather:forecast day="Tue" date="5 Oct 2010" low="23" high="31" text="Scattered Thunderstorms" code="47" />
  45.   <yweather:forecast day="Wed" date="6 Oct 2010" low="23" high="31" text="Scattered Thunderstorms" code="38" />
  46.   <guid isPermaLink="false">VMXX0007_2010_10_05_22_30_ICT</guid>
  47.  </item>
  48. </channel>
  49. </rss>


 
Mon souci vient des "<yweather:"  
Je n'arrive pas à les lire, je veux accéder par exemple à celui ci : <yweather:location city
Je fais donc un  

Code :
  1. echo $simpleXml->channel->yweather:location->city;


 
Et ça me sort évidemment un "Parse error: syntax error, unexpected ':'"
 
Le problème vient du "deux points", quand j'essaye d'afficher les autres éléments j'ai aucun souci.
 
Voilà si vous pouviez m'aider ce serait génial  :love:  :jap:  
 :hello:  


---------------
Ils ne sont grands que parce que nous sommes à genoux. - Topic Kingdom
mood
Publicité
Posté le 05-10-2010 à 22:28:10  profilanswer
 

n°2027311
pataluc
Posté le 06-10-2010 à 15:17:18  profilanswer
 

salut,
 
il faut pas entourer yweather:location par des crochets? (cf http://www.php.net/manual/fr/simpl [...] -basic.php exemple #3)
 
++

n°2027327
Alekusu2
Posté le 06-10-2010 à 15:45:18  profilanswer
 

Quand je mets entre accolades (cf l'exemple 3), ça ne me fait pas d'erreurs, mais je n'arrive pas pour autant à récupérer le contenu de l'attribut city :
 

Code :
  1. $test = $simpleXml->channel->{'yweather:location'};
  2. echo $test['city'];


 
ne renvoie rien :/


---------------
Ils ne sont grands que parce que nous sommes à genoux. - Topic Kingdom
n°2027328
Paulp
~, sweet ~
Posté le 06-10-2010 à 15:45:30  profilanswer
 

Apparemment, les namespaces xml compliquent beaucoup SimpleXML ...
http://devzone.zend.com/article/688

 

Sinon, tu devrais pouvoir le faire avec un xpath

Code :
  1. $test=$simpleXml->xpath('/rss/channel/yweather:location');
  2. echo $test[0]['city'];


Message édité par Paulp le 06-10-2010 à 15:47:57
n°2027341
Alekusu2
Posté le 06-10-2010 à 16:05:46  profilanswer
 

Ah yes merci beaucoup c'est quand même plus simple, mais c'est peut être plus lourd en terme de perf ?


---------------
Ils ne sont grands que parce que nous sommes à genoux. - Topic Kingdom
n°2027360
Alekusu2
Posté le 06-10-2010 à 16:59:37  profilanswer
 

Ah par contre nouveau souci, à la fin de mon XML j'ai ces 2 lignes :
 

Code :
  1. <yweather:forecast day="Tue" date="5 Oct 2010" low="23" high="31" text="Scattered Thunderstorms" code="47" />
  2. <yweather:forecast day="Wed" date="6 Oct 2010" low="23" high="31" text="Scattered Thunderstorms" code="38" />


 
Qui ont le même nom donc.
 
J'ai essayé ça mais ça ne marche pas :  
 

Code :
  1. $forecast = $simpleXml->xpath('/rss/channel/yweather:forecast');
  2. $forecast_today_day = $forecast[0]['day'];
  3. $forecast_today_low = $forecast[0]['low'];
  4. $forecast_today_high = $forecast[0]['high'];
  5. $forecast_today_text = $forecast[0]['text'];
  6. $forecast_today_code = $forecast[0]['code'];
  7. $forecast_tomorrow_day = $forecast[1]['day'];
  8. $forecast_tomorrow_low = $forecast[1]['low'];
  9. $forecast_tomorrow_high = $forecast[1]['high'];
  10. $forecast_tomorrow_text = $forecast[1]['text'];
  11. $forecast_tomorrow_code = $forecast[1]['code'];


---------------
Ils ne sont grands que parce que nous sommes à genoux. - Topic Kingdom
n°2027363
stealth35
Posté le 06-10-2010 à 17:03:15  profilanswer
 
n°2027364
Alekusu2
Posté le 06-10-2010 à 17:10:21  profilanswer
 


Tu réponds à mon premier post ou à mon dernier ? :D
Si c'est le dernier, je vois pas comment ça résout mon souci [:tinostar]


---------------
Ils ne sont grands que parce que nous sommes à genoux. - Topic Kingdom
n°2027368
Paulp
~, sweet ~
Posté le 06-10-2010 à 17:32:03  profilanswer
 

tes noeuds yweather:forecast sont dans un noeud item

n°2027371
Alekusu2
Posté le 06-10-2010 à 17:41:53  profilanswer
 

Merci ! Faute débile d'étourderie :jap:


---------------
Ils ne sont grands que parce que nous sommes à genoux. - Topic Kingdom
mood
Publicité
Posté le 06-10-2010 à 17:41:53  profilanswer
 

n°2027382
stealth35
Posté le 06-10-2010 à 18:37:12  profilanswer
 

Alekusu2 a écrit :


Tu réponds à mon premier post ou à mon dernier ? :D
Si c'est le dernier, je vois pas comment ça résout mon souci [:tinostar]


 
au dernier, pour pouvoir utiliser les namespaces dans un xpath il faut les enregistrer

n°2027387
Alekusu2
Posté le 06-10-2010 à 18:49:47  profilanswer
 

stealth35 a écrit :


 
au dernier, pour pouvoir utiliser les namespaces dans un xpath il faut les enregistrer


Bah non...la preuve c'est que je le fais sans les enregistrer et que ça marche :D


---------------
Ils ne sont grands que parce que nous sommes à genoux. - Topic Kingdom
n°2027389
stealth35
Posté le 06-10-2010 à 18:54:02  profilanswer
 

Alekusu2 a écrit :


Bah non...la preuve c'est que je le fais sans les enregistrer et que ça marche :D


Alekusu2 a écrit :


J'ai essayé ça mais ça ne marche pas :  

 

faudrait savoir...


Message édité par stealth35 le 06-10-2010 à 18:54:23
n°2027393
Alekusu2
Posté le 06-10-2010 à 19:37:27  profilanswer
 

Le problème est expliqué par paulp, j'ai oublié un noeud dans l'adresse du xpath


---------------
Ils ne sont grands que parce que nous sommes à genoux. - Topic Kingdom
n°2027489
Paulp
~, sweet ~
Posté le 07-10-2010 à 11:08:02  profilanswer
 

Mon premier lien explique qu'en effet, il faut enregistrer le namespace pour manipuler ensuite les noeuds avec la méthode children (ce qui est assez lourd, SimpleXML perd tout son interet).
En revanche, le xpath accepte les namespaces.
On peut néanmoins les enregistrer pour pour les abréger par exemple ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec SimpleXML

 

Sujets relatifs
[Resolu] probleme suppression du contenu d'une celluleproblème ajout d'une actualité
Flash et CSS, template en ligne qui ne marche pasProbleme avec getElementById
problème avec xmlhttprequest et firefoxproblème de formulaire
Probleme simpleXML[Résolu] Problème de character set XML et PHP (SimpleXML)
[resolu] simplexml - suppression d'elements - probleme avec unset?probleme avec simplexml
Plus de sujets relatifs à : Problème avec SimpleXML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR