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

APIs XML Discussion :

[XML DOM]Supprimer plusieurs noeud


Sujet :

APIs XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut [XML DOM]Supprimer plusieurs noeud
    Bonjour,

    J'ai un fichier xml comme si dessous qui me permet de créé une bibliothèque de cd et donc j'aimerais pouvoir supprimer un album entier donc en meme temps les noeuds titre et description et bien sur en ciblant le bon album.

    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
    <music>
      <album nom="The album">
        <titre nom="name">
          <description>meilleur album</description>
        </titre >
      </album>
      <album nom="Moi">
        <titre nom="aaaa">
          <description>Le plus mauvais</description>
        </titre >
        <titre nom="bbbbbb">
          <description>Coooll</description>
        </titre>
      </album>
    </music>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $doc = new DOMDocument;
    $doc->load(fichier.xml);
    $doc_xpath = new DOMXPath($doc);
    $entries=$doc_xpath->query('album[@nom="The album"]');
    $delme=$entries->item(0);
    $pNode=$delme->parentNode;
    $pNode->removeChild($delme);
    $doc->save(fichier.xml);
    Merci pour votre aide

  2. #2
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Personne n'aurait une idée pour m'aiguiller ?

    Merci a vous.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Pourquoi ton XPATHc'est 'photo[@nom="The album"]' ? Alors que tes noeuds sont des "album".
    Tu ne teste pas le nombre de résultat retourné par le XPATH, donc si il y en a pas, ça devrait planter.
    Ensuite je connais pas les fonctions de traitement xml de php, mais en java je parcourerais les noeuds renvoyés par le XPATH, et je ferai des removeChild dessus.
    En gros comme t'as fait mais avec une boucle sur les résultats retournés par le XPATH.

  4. #4
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Pour le XPATH 'photo[@nom="The album"]' c'est une erreur de ma part car en faite ca doit être 'album[@nom="The album"]' sinon j'arrive pas a voir ton idée sachant que quand j'utilise mon script mais en mettant juste 'album' dans ma requête XPATH ca supprime bien tous les albums mais moi ce que je veux c'est un album particulier.

    Merci a toi.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    +1 pour Morbo : il faudrait au moins tester le résultat de l'expression XPath.

    Sinon votre code fonctionne, après correction des erreurs de syntaxe, sur le document XML que vous avez fourni :
    Code php : 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
    <?php
    define('FICHIER_XML', 'shandler.xml');
     
    $doc = new DOMDocument;
    $doc->preserveWhiteSpace = FALSE;
    $doc->formatOutput = TRUE;
    $doc->load(FICHIER_XML);
    $doc_xpath = new DOMXPath($doc);
    $entries = $doc_xpath->query('album[@nom="The album"]');
    foreach ($entries as $entry) {
        $entry->parentNode->removeChild($entry);
    }
    //$doc->save(FICHIER_XML);
    // Pour test :
    header('Content-type: text/plain');
    echo $doc->saveXML();
    ?>

  6. #6
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Merci ca marche nickel mais juste une question a quoi sert ton define dans le code.

    Merci a toi.

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

Discussions similaires

  1. [DOM] Supprimer un noeud d'un fichier XML
    Par popy67 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/06/2008, 22h22
  2. [DOM] supprimer un noeud XML
    Par hicham285 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 12/04/2008, 20h28
  3. [DOM] Supprimer plusieurs fils dans un noeuds
    Par Mo_Poly dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 03/03/2008, 17h53
  4. Réponses: 4
    Dernier message: 06/02/2007, 15h18
  5. [PHP5][DOM]Supprimer le noeud courant
    Par panpan dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 03/05/2006, 15h01

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