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] Parcours récursif : récupérer le parent


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut [SimpleXML] Parcours récursif : récupérer le parent
    Bonjour à tous,

    Après m'être plongé dans les méandres de la récursivité, je viens chercher aide et conseil au cas où quelque chose m'échapperait et si c'est bien possible.

    J'ai donc un arbre xml dont je ne connais pas la profondeur. Je cherche à le parser et afficher les identifiants de chaque nœud ainsi que l'identifiant du noeud parent.

    Voici un extrait succinct de mon 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
     
    <Category catalogs="false" id="150401" name="Livres, Musique, Film" refinements="false">
                <Category catalogs="false" id="148401" name="Film" refinements="false">
                    <Category catalogs="false" id="150101" name="Cassette Vidéo/VHS" refinements="true"/>
     
                    <Category catalogs="true" id="149201" name="DVD" refinements="false"/>
                    <Category catalogs="false" id="149801" name="Location de DVD" refinements="false"/>
                    <Category catalogs="false" id="100298223" name="Merchandising / Produits dérivés" refinements="true"/>
                    <Category catalogs="false" id="149001" name="Téléchargement de vidéo" refinements="false"/>
                </Category>
                <Category catalogs="false" id="100095913" name="Musique" refinements="false">
                    <Category catalogs="false" id="150701" name="CD" refinements="true"/>
                    <Category catalogs="false" id="100010313" name="Téléchargement de musique" refinements="false"/>
                    <Category catalogs="false" id="153801" name="Vinyles" refinements="true"/>
     
                </Category>
                <Category catalogs="false" id="100801" name="Livres et magazines" refinements="false">
                    <Category catalogs="false" id="5101" name="Livres" refinements="false"/>
                    <Category catalogs="false" id="104401" name="Journaux et magazines" refinements="true"/>
                </Category>
            </Category>
    Voici la méthode de ma classe actuellement:
    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
     
    private function parseVCT($root,$lvl=0) {
     
                    foreach($root as $name=>$elem) {
                            // Check if children exist
                            if(trim($elem) == "") {
                                    for($i=1;$i<=$lvl;$i++) { echo "\t"; }
     
                                    $children = $elem->children();
                                    $attributs = $elem->attributes();
     
                                    if(trim($attributs) != "") echo '['.$elem->attributes()->id.']'."\n" ;
                                     // boucle recursif  
                                    $this->parseVCT($children,$lvl+1) ;                                                
                            }
                    }
            }
    Niveau récursivité, aucun souci, j'ai bien à l'affichage mes ids correctement du genre:
    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
     
    [150401]
            [148401]
                    [150101]
                    [149201]
                    [149801]
                    [100298223]
                    [149001]
            [100095913]
                    [150701]
                    [100010313]
                    [153801]
            [100801]
                    [5101]
                    [104401]
    Je cherche donc la possiblité d'afficher quelque chose qui ressemblerait à
    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
     
    [0][150401]
            [150401][148401]
                    [148401][150101]
                    [148401][149201]
                    [148401][149801]
                    [148401][100298223]
                    [148401][149001]
            [150401][100095913]
                    [100095913][150701]
                    [100095913] [100010313]
                    [100095913] [153801]
            [150401][100801]
                    [100801][5101]
                    [100801][104401]
    Je suis ouvert à toutes possibilités, je n'ai pas de contrainte. Je suis en PHP5.

    Une idée, une piste, un conseil, un encouragement, je prend tout

    Merci

  2. #2
    Membre actif Avatar de chtipitou
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 214
    Points
    214
    Par défaut
    je donne une idee dans un brouillard total, tu peux pas tester sur
    $root->attributes()->id pour avoir le pere ?
    42
    there is no place like 127.0.0.1
    Mangez des http://www.smarty.net avec vos PHP web s'il vous plait
    var_dump retourne les informations structurées d'une variable, y compris son type et sa valeur. Les tableaux et les objets sont explorés récursivement, avec des indentations, pour mettre en valeur leur structure.

  3. #3
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    C'est une piste que je n'avais pas pensé.

    Je me penche sur cette possibilité qui m'a l'air prometteuse, merci

  4. #4
    Membre actif Avatar de chtipitou
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 214
    Points
    214
    Par défaut
    je n'utilise pas souvent simplexml,

    mais je me rappele qu'en c++ avec tinyxml il fallait caster le pere en node pour reccuperer les attributs, voyons si PHP est toujours aussi magique
    42
    there is no place like 127.0.0.1
    Mangez des http://www.smarty.net avec vos PHP web s'il vous plait
    var_dump retourne les informations structurées d'une variable, y compris son type et sa valeur. Les tableaux et les objets sont explorés récursivement, avec des indentations, pour mettre en valeur leur structure.

  5. #5
    tyx
    tyx est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Bon et bien, j'ai finalement fait une petite bidouille plutôt que quelque chose de beau mais j'avais pas de temps à perdre sur le coup.

    En gros, je mémorise tous les ids pères pour chaque id au fur et à mesure que la fonction descend dans l'arbre et à l'affichage je n'affiche que les 2 derniers.

    Voilà, merci à chtipitou de s'être penché sur le problème.

    Si qqn veut la solution en code qu'il me mp

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

Discussions similaires

  1. [SimpleXML] Récupérer valeur parents après XPath sur valeur enfant
    Par kaoboss dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/09/2011, 21h28
  2. [XPath][SimpleXML] récupération d'infos des parents
    Par littlewings dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 22/11/2006, 18h24
  3. parcours récursif de dossiers selon un niveau un niveau de profondeur
    Par terminatorsk8 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/08/2006, 20h14
  4. <object> : récupérer son parent / changer son contenu
    Par benj63 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/05/2006, 18h24
  5. Réponses: 2
    Dernier message: 04/10/2005, 11h12

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