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 :

[DOM] Parcourir et supprimer les noeuds d'un XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Points : 89
    Points
    89
    Par défaut [DOM] Parcourir et supprimer les noeuds d'un XML
    Bonjour !!

    J'ai un souci depuis quelques jours, j'ai essayé pas mal de chose mais pas grand chose ne marche. Ma solution est vraiment très très sale mais je ne trouve pas mieux...

    J'ai 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
    <products>
            <product date="20120418">
                ......
            </product>
            <product date="20120501">
                ......
            </product>
            <product date="20120420">
                ......
            </product>
            <product date="20120602">
                ......
            </product>
    </products>
    Je dois parcourir ce XML, pour chaque product vérifier si la date est passée et si c'est le cas, je traite les noeuds fils puis je dois supprimer le noeud du fichier XML.
    L'idée est qu'à la fin mon fichier XML ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <products>
            <product date="20120501">
                 ......
             </product>
            <product date="20120602">
                 ......
             </product>
    </products>
    Mon gros souci est que la fonction removeChild du DOM supprime le contexte en s’exécutant.

    Donc après avoir executer $book->removeChild($chapter); mon $book n'a plus de contexte et n'est plus capable de continuer.

    doc du DOM PHP
    After calling this method, the DOMNode::$namespaceURI property on the parent node will be reset to NULL.
    Résultat ma fonction supprime bien la première la première occurence de "product" puis sort du traitement.

    La méthode préconisé pour contourné le problème est :
    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
      <?php
    
    $doc = new DOMDocument;
    $doc->load('book.xml');
    
    $book = $doc->documentElement;
    
    // we retrieve the chapter and remove it from the book
    $chapter = $book->getElementsByTagName('chapter')->item(0);
    
    // copy the namespace URI
    $nsuri = $book->namespaceURI;
    
    // Delete the child node
    $book->removeChild($chapter);
    
    // paste the namespace URI back into the parent node
    $book->namespaceURI = $nsuri;
    ?> 
    Mais j'ai une erreur sur $nsuri = $book->namespaceURI; :
    Forcément on voit dans la doc que cet attribut de classe est en read only, donc j'ai une fatal error. La doc ici

    Moralité : la solution que j'ai trouvé est de rééxecuter ma fonction autant que nécessaire, mais cela veut dire que à chaque fois je redéfini le dom, je recharge le fichier, je reparcours, je supprime un noeud et je recommence tout. C'est super lourd et extrêmement lent.

    Auriez vous une autre solution pour parcourir un arbre XML et supprimer des neouds au fur et a mesure du parcours?

    Merci !!

    -- Bankette --
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème....

  2. #2
    Membre régulier Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Points : 89
    Points
    89
    Par défaut
    Petit up. Je suis toujours coincé sur ce problème depuis 3 mois.

    Merci
    -- Bankette --
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème....

Discussions similaires

  1. Impossible de supprimer les noeuds d'un wxTreeCtrl !
    Par zuzuu dans le forum wxWidgets
    Réponses: 2
    Dernier message: 09/07/2010, 08h41
  2. [XSLT] Supprimer les noeuds vides
    Par knebhi dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/02/2009, 16h07
  3. Supprimer les noeuds precis.
    Par rainlily dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/07/2007, 08h52
  4. Parcourir les noeuds d'un XML
    Par Maglight dans le forum Delphi
    Réponses: 2
    Dernier message: 17/10/2006, 16h41
  5. [JDOM] Supprimer les noeuds fils
    Par calimero2611 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 04/07/2006, 13h31

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