Alainp Posté 21 Avril 2013 Posté 21 Avril 2013 Bonjour, Je cale complètement sur le traitement d'un fichier XML dont voici un extrait : - <product class="pointData"> - <time datatype="forecast" from="2013-04-21T12:00:00Z" to="2013-04-21T12:00:00Z"> - <location altitude="132" latitude="43.3000" longitude="5.3800"> <temperature id="TTT" unit="celcius" value="15.2" /> <windDirection id="dd" deg="302.4" name="NW" /> <windSpeed id="ff" mps="5.3" beaufort="3" name="Lett bris" /> <humidity value="50.8" unit="percent" /> <pressure id="pr" unit="hPa" value="1015.6" /> <cloudiness id="NN" percent="50.8" /> <fog id="FOG" percent="0.0" /> <lowClouds id="LOW" percent="18.8" /> <mediumClouds id="MEDIUM" percent="17.2" /> <highClouds id="HIGH" percent="38.3" /> </location> </time> - <time datatype="forecast" from="2013-04-21T09:00:00Z" to="2013-04-21T12:00:00Z"> - <location altitude="132" latitude="43.3000" longitude="5.3800"> <precipitation unit="mm" value="0.0" /> <symbol id="PARTLYCLOUD" number="3" /> </location> </time> - <time datatype="forecast" from="2013-04-21T06:00:00Z" to="2013-04-21T12:00:00Z"> - <location altitude="132" latitude="43.3000" longitude="5.3800"> <precipitation unit="mm" value="0.0" /> <symbol id="LIGHTCLOUD" number="2" /> </location> </time> - <time datatype="forecast" from="2013-04-21T15:00:00Z" to="2013-04-21T15:00:00Z"> - <location altitude="132" latitude="43.3000" longitude="5.3800"> <temperature id="TTT" unit="celcius" value="15.5" /> <windDirection id="dd" deg="311.3" name="NW" /> <windSpeed id="ff" mps="6.2" beaufort="4" name="Laber bris" /> <humidity value="50.5" unit="percent" /> <pressure id="pr" unit="hPa" value="1013.8" /> <cloudiness id="NN" percent="62.5" /> <fog id="FOG" percent="0.0" /> <lowClouds id="LOW" percent="27.3" /> <mediumClouds id="MEDIUM" percent="36.7" /> <highClouds id="HIGH" percent="36.7" /> </location> </time> Je récupère et j'affiche toutes les données de la ligne <time datatype="forecast" from="2013-04-21T09:00:00Z" to="2013-04-21T12:00:00Z"> mais je voudrai extraire et afficher la valeur de la ligne <temperature id="TTT" unit="celcius" value="15.2" /> uniquement lorsque les valeurs de "from" et de "to" sont identiques J'ai du mal en XML et je ne sais pas comment imbriquer cela. Pour info je suis en php5 et je tente d'utiliser (en vain) la fonction getElementsByTagName Merci par avance si vous pouvez m'aider ou me guider
SStephane Posté 22 Avril 2013 Posté 22 Avril 2013 <?php $szXML = <<<EOT <product class="pointData"> <time datatype="forecast" from="2013-04-21T12:00:00Z" to="2013-04-21T12:00:00Z">- <location altitude="132" latitude="43.3000" longitude="5.3800"> <temperature id="TTT" unit="celcius" value="15.2" /> <windDirection id="dd" deg="302.4" name="NW" /> <windSpeed id="ff" mps="5.3" beaufort="3" name="Lett bris" /> <humidity value="50.8" unit="percent" /> <pressure id="pr" unit="hPa" value="1015.6" /> <cloudiness id="NN" percent="50.8" /> <fog id="FOG" percent="0.0" /> <lowClouds id="LOW" percent="18.8" /> <mediumClouds id="MEDIUM" percent="17.2" /> <highClouds id="HIGH" percent="38.3" /> </location> </time> <time datatype="forecast" from="2013-04-21T15:00:00Z" to="2013-04-21T15:00:00Z">- <location altitude="132" latitude="43.3000" longitude="5.3800"> <temperature id="TTT" unit="celcius" value="15.5" /> <windDirection id="dd" deg="311.3" name="NW" /> <windSpeed id="ff" mps="6.2" beaufort="4" name="Laber bris" /> <humidity value="50.5" unit="percent" /> <pressure id="pr" unit="hPa" value="1013.8" /> <cloudiness id="NN" percent="62.5" /> <fog id="FOG" percent="0.0" /> <lowClouds id="LOW" percent="27.3" /> <mediumClouds id="MEDIUM" percent="36.7" /> <highClouds id="HIGH" percent="36.7" /> </location> </time> </product> EOT; SimpleXML : $xml = simplexml_load_string($szXML); foreach($xml->time as $time): if((string) $time['from'] == (string) $time['to']): print $time->location->temperature['value']; endif; endforeach; (précision, dans la condition, je caste en string -avec (string)- car il s'agit d'objet, sans cast, fort à parier que cela retourne false) Tu peux envisager un truc avec DOM aussi : $dom = new DOMDocument(); $dom->loadXML($szXML); $timeNodes = $dom->getElementsByTagName('time'); foreach($timeNodes as $time): if( $time->getAttribute('from') == $time->getAttribute('to')): print $time->getElementsByTagName('location')->item(0)->getElementsByTagName('temperature')->item(0)->getAttribute('value') ; endif; endforeach; La conclusion : DOMDocument n'est quand même pas idéal à utiliser dans ton cas, peut être plus performant si tu traites un gros fichier, mais bon...
Alainp Posté 22 Avril 2013 Auteur Posté 22 Avril 2013 Bonjour SStephane, Cà me guide car je ne savais pas par où commencer pour cette histoire de date. Je vais essayer ces 2 méthodes
SStephane Posté 22 Avril 2013 Posté 22 Avril 2013 Hello, Bonne chance et... je retire ce que j'ai dit sur DOMDocument : http://p0l0.binware.org/wp-content/uploads/2011/07/300x203xXML-1000-100-300x203.png.pagespeed.ic.Vm75GAcX_4.png (Sauf à ce qu'il y ait eu des MAJ dans l'implémantation, pas de gain de perf avec DD selon plusieurs sources, même des pertes). En gros, utilise la première méthode, en terme de relecture de code, c'est quand même beaucoup plus simple !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant