IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Filtrer le résultat


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut [SimpleXML] Filtrer le résultat
    Bonsoir,

    J'ai utilisé le code de cette discussion : http://www.developpez.net/forums/d65...affichage-rss/
    Avec moi cela ne fonctionne pas...

    Pourtant, il me semble que les modifications sont limitées

    J'ai remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($rss as $tab) {
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for($i = 0; $i < 5; $i++){
      $tab = $rss[$i];
    Le reste du code semble identique.

    Quelque chose m'a échappé ?

    En vous remerciant pour votre aide,

    Jm2t

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    utilise SimpleXML ca sera plus propre et plus simple

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut Re : utilise SimpleXML
    Je ne connaissais pas SimpleXML...
    Merci pour l'info, je peux essayer de regarder, mais ça va forcément me prendre un peu de temps.

    En attendant, j'aurai bien aimé faire fonctionner la boucle for
    Je dois pas être très loin....

    Si quelqu'un à une idée, merci d'avance

    Jm2t

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut Simple XML
    Ok, j'ai trouvé avec Simple XML.

    Pour info, j'ai trouvé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     $i = 0;  
             $nb_affichage = 5;  
             echo '<ul>';  
             foreach($fluxrss->channel->item as $item){  
                 echo '<li><a href="'.(string)$item->link.'">'.(string)$item->title.'</a></li>';  
                 if(++$i>=$nb_affichage)  
                     break;  
             }  
             echo '</ul>';

    Ca marche et je limite les affichages. Super.

    Par contre, je voudrais n'afficher que quelques items.
    Par exemple uniquement ceux de le catégorie "toto"

    Quelqu'un a une idée, je ne trouve pas la solution...

    Merci !

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Jm.2t Voir le message
    Par contre, je voudrais n'afficher que quelques items.
    Par exemple uniquement ceux de le catégorie "toto"

    Quelqu'un a une idée, je ne trouve pas la solution...

    Merci !
    il faut faire une requête xpath

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $xml   = simplexml_load_file('http://www.jeuxvideo.fr/xml/rev.xml');
    $items = $xml->xpath('//item/category[contains(.,"Xbox 360")]/..');
     
    foreach(array_slice($items, 0, 10) as $item)
    {
        //blabla
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Fantastique !
    Ca marche. Merci !!

    foreach(array_slice($items, 0, 10) as $item)
    Ca veut dire que ca n'affiche que les 10 premiers ?

    J'avais trouvé un code qui effectuais quelques vérifications avant d'afficher.
    Et la par contre, j'ai pas réussi à intégrer le Xpath...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php  
        try{
            if(!@$fluxrss=simplexml_load_file('http://www.monsite.com/fichier.xml')){
                throw new Exception('Flux introuvable');
            }        
            if(empty($fluxrss->channel->title) || empty($fluxrss->channel->description) || empty($fluxrss->channel->item->title))
                throw new Exception('Flux invalide');
     
            $i = 0;
            $nb_affichage = 10;
            foreach($fluxrss->channel->item as $item){
                echo '<p><strong>'.(string)$item->title.'</strong> : '.(string)$item->category.'<br /><a href="'.(string)$item->link.'">'.(string)$item->description.'</a><br /></p>';
                if(++$i>=$nb_affichage)
                    break;
            }
        }
        catch(Exception $e){
            echo $e->getMessage();
        }
     
    ?>

    Une idée ?

    Ces vérifications ne sont peut être pas nécessaires. Le fichier xml est le mien...

    Merci d'avance,

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Jm.2t Voir le message
    Fantastique !
    Ca marche. Merci !!

    foreach(array_slice($items, 0, 10) as $item)
    Ca veut dire que ca n'affiche que les 10 premiers ?
    yep, de 0 a 10, tu pourrais faire de 10 a 20 en mettant 10, 10

    pour l'autre code c'est le même principe

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Ok super !

    Et si temporairement je veux tout afficher, je note
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach(array_slice($items, 0, 10000) as $item)
    C'est correct ?

    Pour l'autre code, j'ai recommencé à zéro et ça fonctionne.
    Mais j'ai deux fois simplexml_load_file :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php  
    	try{
    		if(!@$fluxrss=simplexml_load_file('http://www.monsite.fr/fichier.xml')){
    			throw new Exception('Flux introuvable');
    		}		
    		if(empty($fluxrss->channel->title) || empty($fluxrss->channel->description) || empty($fluxrss->channel->item->title))
    			throw new Exception('Flux invalide');
     
    		$xml   = simplexml_load_file('http://www.monsite.fr/fichier.xml');
    		$items = $xml->xpath('//item/category[contains(.,"Xbox 360")]/..');
     
    		foreach(array_slice($items, 0, 10) as $item)
    		{
    			echo '<p><strong>'.(string)$item->title.'</strong> : '.(string)$item->category.'<br /><a href="'.(string)$item->link.'">'.(string)$item->description.'</a><br /></p>';
    		}
    	}
    	catch(Exception $e){
    		echo $e->getMessage();
    	}
    ?>
    C'est grave ?
    Ca vaut le coup à votre avis ces tests if ?


    J'ai le droit encore a une question ?
    Et si je veux afficher la catégorie Xbox 360 + la catégorie PSP ?
    J'ai cherché, j'ai pas trouve l'expression...

    1000 Merci

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Jm.2t Voir le message
    Ok super !

    Et si temporairement je veux tout afficher, je note
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach(array_slice($items, 0, 10000) as $item)
    C'est correct ?
    non et pourquoi 10000 ? t'enlève le array_slice($items, 0, 10000) et tu met juste $items a la place


    les if et compagnie enlève c'est pas beau. c'est pas comme ca que ca se fait et le xpath rend un tableau vide donc pas de soucis pour la suite

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut On y est presque !
    Terrible.

    On commence à être bon.

    Dernière question. Avec un fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <rss version="2.0">
    <channel>
    <title>le titre</title>
    <link>http://www.monsite.fr/fichier.xml</link>
    <description> Bla bla bla</description>
    <language>fr</language>
    <lastBuildDate>Tue, 19 Oct 2010 06:45:09 GMT</lastBuildDate>
     
    <item>
    <title>Titre 1</title>
    <link>lien.htm</link>
    <description> Bla bla bla</description>
    <category>Bateau</category>
    <pilote>Toto</pilote>
    </item>
     
    <item>
    <title>Titre 2</title>
    <link>lien.htm</link>
    <description> Bla bla bla</description>
    <category>Bateau</category>
    <pilote>Tata</pilote>
    </item>
     
    <item>
    <title>Titre 3</title>
    <link>lien.htm</link>
    <description> Bla bla bla</description>
    <category>Voiture</category>
    <pilote>Toto</pilote>
    </item>
     
    </channel>
    </rss>
    Et le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $xml   = simplexml_load_file('http://www.monsite.fr/fichier.xml');
    	$items = $xml->xpath('//item/category[contains(.,"Bateau")]/..');
     
    	foreach($items as $item)
    	{
    		echo '<p>Mon texte</p>';
    	}

    Comment faire pour afficher tous les items de la catégorie Bateau et dont le pilote est Toto ?

    Dans le cas du XML donné, un seul devrait s'afficher.

    Je ne trouve pas...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Ok, j'ai trouvé !
    Avec un séparateur |

    Par contre, j'ai une erreur...

    Quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $xml   = simplexml_load_file('http://www.jeuxvideo.fr/xml/rev.xml');
    $items = $xml->xpath('//item/category[contains(.,"Xbox 360")]/..');
     
    foreach(array_slice($items, 0, 10) as $item)
    {
        //blabla
    }
    S'il n'y a pas de Xbox 360, j'ai le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Invalid argument supplied for foreach() in /mapage.php on line 26
    Ca devrait pas renvoyer un vide ??

  12. #12
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    Peut-être à cause du array_slice( ).

    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ( (array)array_slice(...) ... ) {

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Ben non...

    J'ai aussi essayé de simplifier

    J'ai la même erreur avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $items = $xml->xpath('//item/category[contains(.,"Xbox 360")]/..');
    foreach($items as $item){
    	echo '<p>bla bla</p>';
    }

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    si la requete ne trouve rien c'est normale

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Ah bon ?

    Je croyais que ça rendait un tableau vide ?

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Jm.2t Voir le message
    Ah bon ?

    Je croyais que ça rendait un tableau vide ?
    t'as les erreurs d'activées ?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut Euh...
    Citation Envoyé par stealth35 Voir le message
    t'as les erreurs d'activées ?
    Je ne sais pas

    C'est sur Phpinfo() qu'il faut chercher c'est ça ?

    Oulala...

    Concernant Simple XML j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Revision : $Revision: 1.151.2.22.2.46 $ 
    Schema support : enabled
    Ca m'aide pas trop...

    Il n'y aurait pas un moyen de vérifier si la Xbox 360 est bien présente dans catégorie avant de lancer le Xpath ?

    J'ai essayé avec //my-element[not(text())] mais ça ne colle pas.

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Jm.2t Voir le message
    Je ne sais pas

    C'est sur Phpinfo() qu'il faut chercher c'est ça ?

    oui display_errors et error_reporting

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Merci

    J'ai

    display_errors : On
    error_reporting : 6135

    C'est grave Dr ?

  20. #20
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Jm.2t Voir le message
    Merci

    J'ai

    display_errors : On
    error_reporting : 6135

    C'est grave Dr ?
    le error_reporting devrais etre plus élever

    mais quand je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $xml   = simplexml_load_file('http://www.jeuxvideo.fr/xml/rev.xml');
    $items = $xml->xpath('//item/category[contains(.,"Xbox 360")]/..');
     
    foreach(array_slice($items, 0, 10) as $item)
    {
        //blabla
    }
    j'ai pas d'erreur

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/10/2008, 11h25
  2. Réponses: 7
    Dernier message: 08/07/2008, 19h41
  3. Filtrer le résultat
    Par nellynew dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/12/2006, 09h05
  4. [SimpleXML] Filtrer des balises grâce à leurs attributs
    Par tatayecorp dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 15/08/2006, 20h06
  5. Réponses: 1
    Dernier message: 13/04/2005, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo