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

Langage PHP Discussion :

Remonter l'arborescence d'un noeud xml [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut Remonter l'arborescence d'un noeud xml
    Bonjour,

    Je cherche à supprimer une branche de mon xml, sur la condition qu'elle contient un nœud avec un certain attribut.

    Je trouve donc mes nœuds concernés avec une requête xpath, tout en ayant déjà chargé mon xml avec DOMDocument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nodeList = $xpath->query( "//product[@code='HOP']/features/info/status[@code='0003']" );
    Maintenant, j'aimerais bien supprimer les nœuds features que je trouve, c'est-à-dire ceux contenant un enfant info avec un enfant status ayant l'attribut code égal à 0003.

    Seul soucis, j'arrive bien à supprimer l'enfant status mais je n'arrive pas à remonter à son grand-parent (features) pour le supprimer.

    Voici la façon dont je supprime l'enfant status :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            $nodeList = $xpath->query( "//product[@code='HOP']/features/info/status[@code='0003']" );
            foreach( $nodeList as $element )
            {
                  $test = $element->parentNode->removeChild( $element );
           }
    Une idée ?

    Merci

  2. #2
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    si tu remontes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test = $element->parentNode->parentNode->parentNode->removeChild($element->parentNode->parentNode);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Testé et cela ne fonctionne pas.

  4. #4
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Shadow aok Voir le message
    Testé et cela ne fonctionne pas.

    c'est peu etre pas bon dans le nombre de parentNode

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    J'ai testé avec deux parentNodes, ce qui nous mène au grand-parent que je cherche à supprimer, sans succès.
    Même avec 3 cela supprimerait tout mais fonctionnerait.

  6. #6
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    t'as un bout de ton fichier XML pour que je test ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Je te sors ça.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    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
    <?xml version="1.0"?>
    <response version="2.0">
    <product code="HOP">
    <features>
        <info>
            <status code="0003"/>
            <messages>
                <message code="3021" type="reason"/>
            </messages>
        </info>
        <profile>Product 1</profile>
    </features>
    <features>
        <info>
            <status code="0000"/>
        </info>
        <profile>Product 2</profile>
    </features>
    </product>
    </response>
    Le but est donc de supprimer tous les noeuds "features" qui contiennent "status" avec un attribut "code" à "0003".

  9. #9
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nodeList = $xpath->query('//product[@code="HOP"]/features/info/status[@code="0003"]/parent::node()/parent::node()');
    foreach( $nodeList as $element )
    {
        $element->parentNode->removeChild($element);
    }

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    C'est parfait.
    Il fallait donc bien jouer sur les parentNodes mais avec xpath.

    Merci

  11. #11
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Shadow aok Voir le message
    C'est parfait.
    Il fallait donc bien jouer sur les parentNodes mais avec xpath.

    Merci
    chez moi ca marche quand meme si je fais ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nodeList = $xpath->query('//product[@code="HOP"]/features/info/status[@code="0003"]');
    foreach( $nodeList as $element )
    {
        $element->parentNode->parentNode->parentNode->removeChild($element->parentNode->parentNode);
    }

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Je me suis peut-être trompé sur le nombre de parentNode (3 à gauche, 2 à droite) mais au final, vu qu'on le fait avec le xpath, ça doit être un peu plus rapide non ?

  13. #13
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Shadow aok Voir le message
    Je me suis peut-être trompé sur le nombre de parentNode (3 à gauche, 2 à droite) mais au final, vu qu'on le fait avec le xpath, ça doit être un peu plus rapide non ?
    oui

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

Discussions similaires

  1. XML remonter une arborescence en DOMDocument
    Par dacid dans le forum Langage
    Réponses: 0
    Dernier message: 12/12/2012, 17h47
  2. [Ajout noeud xml] comment ça marche?
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 37
    Dernier message: 19/07/2007, 22h46
  3. Réponses: 3
    Dernier message: 01/04/2005, 09h37
  4. XSL ne parvient pas à lire les noeuds XML ??
    Par yahn dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 27/06/2004, 19h29
  5. Remonter une arborescence
    Par Gwipi dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/11/2003, 18h04

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