Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2134 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


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
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-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)