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

  FORUM HardWare.fr
  Programmation
  PHP

  PHP et XML + xpath : demande de précisions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP et XML + xpath : demande de précisions

n°1799810
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 09:17:00  profilanswer
 

Bonjour à tous, mes amis ! [:black_lord]  
 
 
Pour réaliser un "tri" dans un code XML, on peut utiliser la méthode xpath :
 

Code :
  1. <?php
  2. $string = <<<XML
  3. <a>
  4. <b>
  5.   <c>text</c>
  6.   <c>stuff</c>
  7. </b>
  8. <d>
  9.   <c>code</c>
  10. </d>
  11. </a>
  12. XML;
  13. $xml = new SimpleXMLElement($string);
  14. /* On cherche <a><b><c> */
  15. $result = $xml->xpath('/a/b/c');
  16. while(list( , $node) = each($result)) {
  17.     echo '/a/b/c: ',$node,"\n";
  18. }
  19. /* Les chemins relatifs fonctionnent aussi... */
  20. $result = $xml->xpath('b/c');
  21. while(list( , $node) = each($result)) {
  22.     echo 'b/c: ',$node,"\n";
  23. }
  24. ?>


 
J'aimerais, dans ce code, au lieu de mettre directement la portion de code XML, qu'on l'a récupère à partir d'un fichier distant (URL). J'ai essayé un $string = fopen ("http://www.domaine.com/fichier.xml" ); mais rien de bien de convaincant. :/
 
Quelqu'un peut-il m'éclairer ? [:transparency]  
 
 
Merci.


Message édité par zoukoufxxx le 14-10-2008 à 14:46:21

---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
mood
Publicité
Posté le 14-10-2008 à 09:17:00  profilanswer
 

n°1799975
masklinn
í dag viðrar vel til loftárása
Posté le 14-10-2008 à 14:08:15  profilanswer
 

Ca n'a strictement aucun rapport avec XML ou XPath, c'est uniquement une question de PHP [:petrus75]
 
et la réponse est... dans la doc PHP
http://fr2.php.net/manual/en/function.fopen.php
http://fr2.php.net/manual/en/function.fread.php
http://fr2.php.net/manual/en/function.fclose.php


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1800016
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 14:49:45  profilanswer
 

Merci maître. [:mr couleur]  
 
 
J'ai tenté ça :

Code :
  1. <?php
  2. $filename = "http://www.carbeo.com/rss/moy_dpt.xml";
  3. $handle = fopen($filename, "r" );
  4. $contents = fread($handle, filesize($filename));
  5. /* On cherche <item><title> */
  6. $result = $contents->xpath('item/title');
  7. while(list( , $node) = each($result)) {
  8.     echo 'item et title : ',$node,"\n";
  9. }
  10. fclose($handle);
  11. ?>


 
Mais :
Warning: filesize() [function.filesize]: stat failed for http://www.carbeo.com/rss/moy_dpt.xml in /home/users/t/tomtom/www/test/index.php on line 4
 
Warning: fread() [function.fread]: Length parameter must be greater than 0 in /home/users/t/tomtom/www/test/index.php on line 4
 
Fatal error: Call to a member function xpath() on a non-object in /home/users/t/tomtom/www/test/index.php on line 8
 
 [:sumo]  
 


Message édité par zoukoufxxx le 14-10-2008 à 14:50:15

---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800017
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 14:50:34  profilanswer
 

masklinn a écrit :

Ca n'a strictement aucun rapport avec XML ou XPath, c'est uniquement une question de PHP [:petrus75]
 
et la réponse est... dans la doc PHP
http://fr2.php.net/manual/en/function.fopen.php
http://fr2.php.net/manual/en/function.fread.php
http://fr2.php.net/manual/en/function.fclose.php


 :non:  
http://fr.php.net/simplexml_load_file
 
@zoukoufxxx
 [:rtfm]

Message cité 1 fois
Message édité par dwogsi le 14-10-2008 à 14:52:09

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1800019
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 14:55:29  profilanswer
 


J'avais déjà testé, ça marchait pas [:cerveau zytrasnif]
 
EDIT : ça fait une après-midi et une matinée que je suis dessus [:haha_auto]


Message édité par zoukoufxxx le 14-10-2008 à 14:56:29

---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800021
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 14:57:21  profilanswer
 

ça marche pas? c'est à dire?
Et la config de php permet-elle d'ouvrir des URL distantes?


Message édité par dwogsi le 14-10-2008 à 14:57:44

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1800025
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 15:00:27  profilanswer
 

Un phpinfo () te renseignerai ?


---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800032
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 15:19:19  profilanswer
 

En gros c'est ça qui t'intéresse :
http://www.manuelphp.com/php/ini.allow-url-fopen.php
Sinon je crois que phpinfo() donne cette info si mes souvenirs sont exactes.
Et qu'est ce que simplexml_load_file() te sort?????????????????


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1800033
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 15:23:25  profilanswer
 

phpinfo me sort : allow_url_fopen : On
Donc ça semble OK. :)


---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800034
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 15:24:02  profilanswer
 

Mais bordel... :o :o :o :o
Et qu'est ce que simplexml_load_file() te sort?????????????????


Message édité par dwogsi le 14-10-2008 à 15:24:20

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
mood
Publicité
Posté le 14-10-2008 à 15:24:02  profilanswer
 

n°1800035
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 15:25:04  profilanswer
 

Pour simplexml_load_file(), tu le mettrais comme ça ? :
 

Code :
  1. <?php
  2. $contents = simplexml_load_file("http://www.carbeo.com/rss/moy_dpt.xml" );
  3. /* On cherche <item><title> */
  4. $result = $contents->xpath('item/title');
  5. while(list( , $node) = each($result)) {
  6.     echo 'item et title : ',$node,"\n";
  7. }
  8. fclose($handle);
  9. ?>


 
 [:hiddensmile]


Message édité par zoukoufxxx le 14-10-2008 à 15:25:28

---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800038
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 15:28:43  profilanswer
 

Le fclose() a rien à foutre là.
 
Je mettrais quelque chose comme ça (pas testé) :

Code :
  1. <?php
  2. $contents = simplexml_load_file("http://www.carbeo.com/rss/moy_dpt.xml" );
  3. /* On cherche <item><title> */
  4. $result = $contents->xpath('item/title');
  5. foreach($result as $node) {
  6.     // $node est de type SimpleXMLElement, pas sûr que ça fonctionne bien
  7.     echo 'item et title : ',$node->title,"\n";
  8. }
  9. ?>


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1800040
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 15:33:36  profilanswer
 

dwogsi a écrit :

Le fclose() a rien à foutre là.


Je l'avais oublié. [:chepakoi]  
 
 

dwogsi a écrit :


Code :
  1. <?php
  2. $contents = simplexml_load_file("http://www.carbeo.com/rss/moy_dpt.xml" );
  3. /* On cherche <item><title> */
  4. $result = $contents->xpath('item/title');
  5. foreach($result as $node) {
  6.     // $node est de type SimpleXMLElement, pas sûr que ça fonctionne bien
  7.     echo 'item et title : ',$node->title,"\n";
  8. }
  9. ?>



Merci beaucoup. :jap:
J'ai testé et ça m'affiche rien. :/
 


---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800043
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 15:37:43  profilanswer
 

Ouai non mais laisse tomber le code que j'ai donné.
Tu cherches à faire quoi exactement?
 
Pour lister tous les titre de toute les channels ya qu'a faire :

Code :
  1. <?php
  2. $xml = simplexml_load_file("http://www.carbeo.com/rss/moy_dpt.xml" );
  3. foreach($xml->channel as $channel)
  4.     foreach($channel->item as $item) {
  5.         echo 'Titre : ',$item->title,"<br />";
  6.     }
  7. ?>


Fonctionne.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1800047
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 15:41:05  profilanswer
 

Ou pour faire même plus complet :

Code :
  1. <?php
  2. $xml = simplexml_load_file("http://www.carbeo.com/rss/moy_dpt.xml" );
  3. foreach($xml->channel as $channel)
  4. {
  5.     echo '<h1>',$channel->title,'</h1><ul>';
  6.     foreach($channel->item as $item) {
  7.         echo '<li><a href="',$item->link,'">',$item->title,'</a></li>';
  8.     }
  9.     echo '</ul>';
  10. }
  11. ?>


Non?


Message édité par dwogsi le 14-10-2008 à 15:45:45

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1800049
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 15:42:45  profilanswer
 

Tu es un dieu [:cerveau lent]  
Ca fonctionne effectivement !
Un grand merci ! [:haha jap]


---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800055
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 15:51:28  profilanswer
 

Le listage/filtrage des données fonctionne très bien.
Ce que je voudrais faire concrètement, c'est afficher les prix des carburants d'un département spécifique.
Comment faire ? [:le nivea sun de dm]  
Je suppose qu'il faut user de if (title = "Haute-Loire" ) { alors afficher les prix des carburants en Haute Loire ; } ?


---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800056
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 15:58:32  profilanswer
 

Tu supposes bien. Mais essais quelque chose au moins !
C'est par l'Armée du Salut ici !

 

Bon allez, un petit exemple quand même :

Code :
  1. <?php
  2. // Uniquement pour l'ain par exemple :
  3. $dep = '01';
  4.  
  5. $xml = simplexml_load_file("http://www.carbeo.com/rss/moy_dpt.xml" );
  6. foreach($xml->channel as $channel)
  7. {
  8.     foreach($channel->item as $item) {
  9.         if( substr($item->title,0,2) == $dep )
  10.         {
  11.             echo $item->title,' : ',$item->description,'<br />';
  12.         }
  13.     }
  14. }
  15. ?>
 

Là tu aura tous les tarifs des carburants proposés dans l'ain.
Suffit ensuite de changer le numéro de département pour "aller voir ailleur".
Tu devrais aussi penser à copier localement le fichier et ne le télécharger que de temps en temps. Ca évite d'avoir trop de requêtes externes.

 

Edit : Et puis penser à stopper les boucles aussi quand tu as trouvé ce que tu cherchais (break).


Message édité par dwogsi le 14-10-2008 à 16:15:02

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1800058
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 16:05:36  profilanswer
 

Un énorme merci à toi ! Je n'y serais point arriver tout seul, c'est vraiment sympa. [:cerveau discobeck]  
 
J'ai vraiment du mal avec le PHP. J'arrive à lire et comprendre le code, mais j'ai toujours du mal à le pondre. :sweat:  


---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
n°1800060
dwogsi
Défaillance cérébrale...
Posté le 14-10-2008 à 16:07:39  profilanswer
 

Parce que t'as jamais essayé de commencer par les bases. :)
Et ne viens pas dire le contraire!


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1800136
zoukoufxxx
La bogossitude made in HFR
Posté le 14-10-2008 à 18:46:46  profilanswer
 

Si si, j'avais les bases mais les ai perdu. [:hiddensmile]  
Et là c'était assez urgent (car boulot), mais ça m'a pas empêcher de chercher par moi-même avant de venir requir votre aide. :jap:


---------------
Le site des BD d'HFR | Aurélien Amacker : Arnaque ? - Mongolien du Web
mood
Publicité
Posté le   profilanswer
 


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

  PHP et XML + xpath : demande de précisions

 

Sujets relatifs
gsoap2 utilisable avec un simple fichier XML[Python]Parser un fichier XML contenant des accents
[PHP] attribut et méthode statiques ?TOMCAT en PHP - Utiliser sockets en multi-connexions
Open XML API : insérer une image dans Word[PHP] header sans effet
PHP et <input />Est-il possible de sélectionner un onglet Excel bien précis avec PHP ?
Reproduire l output mysql + PHPFormulaire de contact PHP
Plus de sujets relatifs à : PHP et XML + xpath : demande de précisions


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