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] Suppression d'un noeud


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut [DOM] Suppression d'un noeud
    Bonjour,

    J'ai essayé avec simpleXml puis avec Dom de supprimer un noeud donné, mais je n'arrive pas à mes fins.

    Voici le fichier xml en question :

    Code XML : 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
    22
    <categories>
    <categorie>
    <nom>Divers 2005</nom>
    <description/>
    <album>
    <lien>http://www.bubbleshare.com/feed.xml</lien>
    </album>
    <album>
    <lien>http://www.bubbleshare.com/feed.xml</lien>
    </album>
    </categorie>
    <categorie>
    <nom>Divers 2006</nom>
    <description/>
    <album>
    <lien>http://www.bubbleshare.com/feed.xml</lien>
    </album>
    <album>
    <lien>http://www.bubbleshare.com/feed.xml</lien>
    </album>
    </categorie>
    </categories>

    Le paramètre passé par le formulaire est le nom de la catégorie.

    Je cherche dans un premier temps à effacer une catégorie entière.

    J'utilise le code suivant (que j ai fait varié) :

    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
     $dom = new DOMDocument();
      $dom->load('liste.xml');
     
      $book = $dom->documentElement;
     
          $i=0;
          do {
            $categorie = $book->getElementsByTagName('categorie')->item(0)->nom->nodevalue;
     
            $i=$i+1;
          } while ($categorie != $_GET['categ']);
          $i=$i-1;
     
     
     $book->removeChild($categorie);
     
      echo $dom->save('test.xml');
    D'avance merci

  2. #2
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Bonjour,
    Merci de prendre l'habitude de donner tous les messages d'erreurs lorsque tu postes pour un problème.
    Celui que tu reçois te dit probablement que tu utilises le mauvais type d'objet pour removeChild. $categorie contient une chaîne de caractères, et removeChild attend une référence sur le noeud.
    Il faut que tu fasses quelque chose comme ça à l'intérieur de ton do-while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $categorie = $book->getElementsByTagName('categorie')->item(0);
    $nomCategorie = $categorie->nom->nodeValue;
    Voilà, si j'ai bien compris ce que tu voulais faire...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut aucun message d'erreur
    Mais je n'ai pas de message d'erreur. Il me manque certainement une option à cocher.

    En tout cas, avec le code que tu m'as cité, si je fais un echo du $nomCategorie, il n'affiche rien.

  4. #4
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par nightf
    Mais je n'ai pas de message d'erreur. Il me manque certainement une option à cocher.
    J'espère qu'ils ne sont pas désactivés, on ne peut pas faire de développement sans messages d'erreurs.
    A mettre en début de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error_reporting(E_ALL);
    Citation Envoyé par nightf
    En tout cas, avec le code que tu m'as cité, si je fais un echo du $nomCategorie, il n'affiche rien.
    Et avant tu affichais quelque chose avec $categorie ? Je n'ai pas vérifié la récupération de la chaîne, je l'ai réutilisée telle quelle. A la réflexion je ne vois pas comment tu peux récupérer quoi que ce soit avec "->nom", pour moi il faut réutiliser getElementsbyTagName.

  5. #5
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Presque réussi
    Merci pour toute l'aide, j'arrive à effacer des catégories dans mon document xml

    Pour les albums, j'obtiens le message suivant:

    Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in C:\gestour\www\add_links.php:89 Stack trace: #0 C:\gestour\www\add_links.php(89): DOMNode->removeChild(Object(DOMElement)) #1 {main} thrown in C:\gestour\www\add_links.php on line 89
    avec le code suivant :



    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
    22
    $doc = $dom->documentElement;
     
          $i=0;
            $categorie = $doc->getElementsByTagName('categorie');
           for ($j = 0; $j < $categorie->length; $j++) {
                $itemCat=$categorie->item($j);
                $nomalbum = $itemCat->getElementsByTagName('album');
                for ($i = 0; $i < $nomalbum->length; $i++) {
                    $itemalb=$nomalbum->item($i);
                    $liens = $itemalb->getElementsByTagName('lien');
                    $itlien=$liens->item(0);
                    //echo $itlien->firstChild->nodevalue;
                    foreach($liens as $lien){
                          if($lien->firstChild->nodeValue==$_GET['alb'])
                          {
                            echo 'effacement';
                            $oldalb = $doc->removeChild($itlien);
                          }
                        }
                }
            }
      $dom->save('liste.xml');

    Je pense que c'est un problème de typage, mais j'avoue que je vois pas bien.

    Merci pour votre aide

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Stack trace?
    Je n'ai pas trouvé d'infos en plus sur le sujet.

    Quelqu'un connait ce message d'erreur ?

Discussions similaires

  1. [DOM] suppression de plusieurs noeuds
    Par yannux dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 09/08/2007, 11h02
  2. [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
  3. [DOM] - Suppression de noeud.
    Par jacquesh dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 17/02/2006, 11h34
  4. [VB.NET] [XML] Suppression d'un noeud dans un fichier XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2004, 11h24
  5. [DOM] suppression d'un noeud fils xml en JAVA
    Par alexandre54 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 20/03/2003, 09h44

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