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 XML] Suppression de noeud XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [DOM XML] Suppression de noeud XML
    Bonjour,

    Je ne comprend pas pourquoi cette méthode de supression ne fonctionne pas :
    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
     
    function deleteReferer($name) { 
         $dd = domxml_open_file("fic.xml"); 
         $noderoot = $dd->document_element(); 
          $referers = $noderoot->get_elements_by_tagname("referer"); 
     
         foreach ($referers as $referer) { 
           $attr=$referer->attributes(); 
           ///on cherche le bon noeud/ 
           if(strcmp($name, $attr[0]->value)==0) { ///cela fonctionne, on  rentre bien dans la boucle/ 
            $child = $noderoot->remove_child($referer); ///suppression/ 
           } 
          } 
          if($dd->dump_file("fic.xml")) 
            return true; 
           else 
            return false;    
    }
    Mon fichier fic.xml :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <referers> 
       <referer site="localhost"  url="http://localhost/zzz/www/test_refer.php" date="26-04-2006 17:59:19"/> 
       <referer site="localhost"  url="http://localhost/zzz/www/test_refer.php" date="26-04-2006 17:59:13"/> 
    </referers>
    Il n'ya aucune erreur, $noderoot->remove_child($referer) me renvoie bien un noeud et pas false.

    Merci de m'eclairer !

    Arnaud.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    quand tu dis "ça marche pas", il se passe quoi ?

    au fait, tu ferais mieux d'utiliser http://fr3.php.net/manual/fr/functio...tattribute.php que attributes (surtout qu'il semblerait que [] ne soit pas reconnu pour les DOMNamedNodeMap, et qu'il faille utiliser item : http://fr3.php.net/dom )
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Le noeud n'est pas supprimé !

    Cette partie fonctionne bien, il rentre dans la boucle lorsqu'il detecte le bon noeud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     strcmp($name, $attr[0]->value)==0
    Mais ne le supprime pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $child = $noderoot->remove_child($referer);

  4. #4
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    As-tu verifié ton fichier xml ?
    Il est identique du debut à la fin ?

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Le fichier xml est identique du debut à la fin.

    J'ai legerement modifier le code, mais il ne veut toujours pas supprimer les noeuds :
    (Il rentre bien dans la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strcmp($name, $referer->get_attribute("site"))==0)
    )
    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
        function deleteReferer($name) {
          $dd = domxml_open_file($this->fic);
          $noderoot = $dd->document_element();
          $referers = $noderoot->child_nodes();
     
          foreach ($referers as $referer) {
            if(strcmp($name, $referer->get_attribute("site"))==0) {
             $child = $noderoot->remove_child($referer);
            }
           }
     
           if($dd->dump_file($this->fic))
             return true;
            else 
             return false;    
        }

  6. #6
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    C'est ptete un problème de droit d'accès à ton fichier.
    (Il faut autoriser le droit d'écriture)

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Non les droits sont bien mis sur le fichier (l'ajout fonctionne tres bien)

    En fait lorsque je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xmlfile = $dd->dump_mem(true);
    echo htmlentities($xmlfile);
    La modification est bien visible.

    Le problème doit venir du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dd->dump_file($this->fic)
    Mais je ne vois pas pourquoi.

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Je dis ça juste comme ça... mais es-tu sûr que la variable $dd est bien modifiée ? que ce n'est pas plutôt une copie du fragment d'arbre DOM qui le serait ? as-tu essayé de faire un dump de $dd pour vérifier ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

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

Discussions similaires

  1. [DOM] Suppresion d'un noeud XML
    Par lbouriez dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 10/01/2008, 19h58
  2. [DOM] Création d'un noeud xml avec childNode
    Par starr dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/03/2007, 11h18
  3. [XML] [DOM(XML?)] Suppression d'un noeud XML en php
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/01/2007, 15h11
  4. Réponses: 2
    Dernier message: 06/07/2006, 08h47

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