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 :

[XML] Simple HTML DOM : first-child()


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut [XML] Simple HTML DOM : first-child()
    Bonjour à tous, j'utilise SIMPLE HTML DOM (http://simplehtmldom.sourceforge.net/manual_api.htm) afin de traiter des pages RSS.

    J'ai un soucis dans la traduction de mon arborescence, j'ai consulté pas mal de liens mais je ne comprend pas du tout l'architecture et la logique pour traiter les "child" de mon XML.

    Ex :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <item>
    <title>
    Ceci est mon titre
    </title>
    <link>
    http://localhost/index.php?news=10
    </link>
    </item>

    je souhaite récupérer mon titre est mon lien sur chaque "item". J'ai bien tenté plusieurs choses mais sans succès.

    J'ai tenté cela (pour récupérer mon "title") :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $html->find('item')->first_child (0);

    Helas en retour j'obtiens :

    Call to a member function first_child() on a non-object
    J'en déduis que je n'ai pas du comprendre la façon de traiter, sauriez vous via l'exemple ci-dessus me donner une exemple afin de traiter cela ? (récupérer mon title par exemple, puis mon "link".

    un exemple clair me permettrai de bien cerner la logique de ce systeme !

    Merci par avance à ceux qui prendront le temps de me répondre !

  2. #2
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bonjour,

    D’après la doc fourni dans le lien, il faut utiliser "first_child" sans paramètre, ou "children" avec 0 en paramètre (sous couvert que le "find" retourne bien ce qui et attendu...).

    Bon courage...
    Signature à venir...
    Ancienne : Divers NTIC (PHP, Dojo, à venir...) : http://tif44.fr/blog/

  3. #3
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    J'ai bien tenté comme dans mon exemple ci-dessus, le 1 child désigne l'élément au dessous de l'élément du "find" ?

  4. #4
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bonjour,

    Il faut voir le xml comme un arbre : la branche principale "item" porte deux branches "title" et "link" (dans l'ordre), donc il semble logique que si "$html->find('item')" pointe bien sur la branche "item", le "->firstchild()" pointe sur "title". De la même façon si le find pointe bien sur "item", "->children(0)" pointe sur "title" et "->children(1)" "link". Par contre, ces deux méthodes retournent à nouveau un "element" dont il faut probablement extraire la valeur (peut être "->plaintext" ?).

    Peut etre est il simplement possible de faire "$html->find('item')->title" ou "$html->find('item')->link"?

    Bon courage...
    Signature à venir...
    Ancienne : Divers NTIC (PHP, Dojo, à venir...) : http://tif44.fr/blog/

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    $html->find('item') retourne un array donc pour parcourir l'ensemble des éléments il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $item = $html->find('item');
    foreach( $item as $i){
      // traitement
    }
    si tu veux récupérer le 1st item alors il te faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $item = $html->find('item', 0);
    et donc pour récupérer le first_child du 1st item
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $titre = $html->find('item', 0)->first_child();
    Lu dans la même doc que vous :
    mixed find ( string $selector [, int $index] ) Find children by the CSS selector. Returns the Nth element object if index is set, otherwise, return an array of object.

    element $e->first_child () Returns the first child of element, or null if not found.

  6. #6
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Merci pour cette explication, c'est clair maitnenant !

  7. #7
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Je reviens vers avec une petite problématique, je souhaite récupérer via mon XML mes liens d'articles via le code ci-dessous :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $html = file_get_html('http://www.laintimes.com/rss/');
    $lien = $html->find('link');
    var_dump($lien);

    helas en retour, j'obtiens sur mon var_dump

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    array (size=11)
      0 => 
        object(simple_html_dom_node)[11]
          public 'nodetype' => int 1
          public 'tag' => string 'link' (length=4)
          public 'attr' => 
            array (size=0)
              empty
          public 'children' => 
            array (size=0)
              empty
          public 'nodes' => 
            array (size=0)
              empty
    Je ne comprend pas pourquoi il me trouve des string vide

    Si quelqu'un sait m'éclairer merci par avance

    EDIT: Ou je devrai peut-être passer par "items" puis récupérer mon "link" via child ? Si cela est plus propre que de faire une requête directement sur le "link" ?

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    quand tu fais $html->find('link')tu obtiens un array, comme précisé ci avant, qui est un array d'objet, donc rien de surprenant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $liens = $html->find('link');
    foreach( $liens as $elem){
      // tu accède ici aux propriétés de ton lien
      echo $elem->href;
    }

  9. #9
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Merci, pour ta réponse

    Il s'agit bien la de XML, cela ne va il poser soucis avec le href ?

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    cela ne va il poser soucis avec le href ?
    pas compris la question.

  11. #11
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Et bien mon xml se présente sous la forme,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <item>
    <link>http://monlien.fr</link>
    </item>
    Cela ne va il pas poser soucis de recherche l'attribut "href" qui n'est pas présent ?

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Fais un simple test d'existence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $liens = $html->find('link');
    foreach( $liens as $elem){
      // tu accède ici aux propriétés de ton lien
      if( isset($elem->href)){
        echo $elem->href;
      }
    }

  13. #13
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Ce que je ne comprend pas, c'est le fait de faire une recherche sur un element XML et de recherche un attribut qui n'existe pas, je viens de faire le test cela me retourne vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <link>http://monlien.fr</link>

  14. #14
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Ce que je ne comprend pas, c'est le fait de faire une recherche sur un element XML et de recherche un attribut qui n'existe pas...
    ce que je ne comprends pas c'est où tu veux en venir?

  15. #15
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    En résumé, dans l'exemple que tu me donnes je cherche un attribut "Href", mais le code en XML ne comporte pas d'attribut donc comment ce code peut il fonctionner ?

    J'essai de reformuler, dis moi si cela n'est pas clair

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Je crois comprendre que tu veux parser un fichier XML.

    Je te conseille comme lecture Création et lecture de flux RSS 2.0 en PHP.

  17. #17
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Je ne souhaite pas mettre en place un FLUX RSS, mais bien réutiliser via la librairie cité ci dessus un flux déjà existant. Je souhaite uniquement comprendre la logique pour parser du XML.


    je prend note de l'article que tu m'as communiqué néanmoins il ne répond pas du tout à ma question

  18. #18
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Je passe en résolu, j'ai trouvé ma syntaxe via les exemples de l'article que tu m'as communiqué

  19. #19
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Je passe en résolu,...
    aller, un dernier effort pour cliquer sur le bouton résolu dans ce cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. simple html dom 404
    Par Lekno dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 29/10/2013, 07h28
  2. simple html dom : récupérer valeur attribut title
    Par totof74 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2012, 17h10
  3. Parser une page HTML avec Simple html dom parser
    Par thelover2fr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 24/05/2012, 13h26
  4. PHP Simple HTML DOM Parser
    Par almoha dans le forum Langage
    Réponses: 11
    Dernier message: 02/03/2012, 21h40
  5. API simple html dom
    Par ryodo dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 26/07/2011, 03h35

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