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

  1. #1
    Membre régulier 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
    Points : 107
    Points
    107
    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 régulier 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
    Points : 107
    Points
    107
    Par défaut
    Personne n'aurait une idée pour m'aiguiller ?

    Merci a vous.

  3. #3
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    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 régulier 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
    Points : 107
    Points
    107
    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
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    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 régulier 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
    Points : 107
    Points
    107
    Par défaut
    Merci ca marche nickel mais juste une question a quoi sert ton define dans le code.

    Merci a toi.

  7. #7
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    Par défaut
    A définir une constante et accessoirement rendre le code plus cohérent (si le nom du fichier est modifié vous n'avez à le faire qu'une seule fois)

  8. #8
    Membre régulier 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
    Points : 107
    Points
    107
    Par défaut
    juste une question qui a rien a voir avec mon ex-probléme mais voila quand on utilise ca $doc->formatOutput = TRUE; ca sert bien a mettre en forme son fichier xml pour qu'il ressemble a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <music>
      <album nom="The album">
        <titre nom="name">
          <description>meilleur album</description>
        </titre >
      </album>
    </music>
    mais voila moi quand je l'utilise et que je rajout par exemple un nouvelle album ca donne plutot ca apres execution du script ajout d'album (tous les balise sont en lignes et non en colonne pourquoi).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <music>
      <album nom="The album">
        <titre nom="name">
          <description>meilleur album</description>
        </titre >
      </album>
      <album nom="test"><titre nom="ess"><description>album</description></titre ></album></music>
    Merci pour ta réponse

  9. #9
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    Par défaut
    Je n'ai pas ce problème en utilisant strictement les mêmes options (preserveWhiteSpace et formatOutput) :
    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
    18
    19
    20
    define('FICHIER_XML', 'shandler.xml');
     
    header('Content-type: text/plain');
    $doc = new DomDocument;
    $doc->preserveWhiteSpace = FALSE;
    $doc->formatOutput = TRUE;
    $doc->load(FICHIER_XML);
     
    $album = $doc->createElement('album');
    $album->setAttribute('nom', 'test');
    $doc->documentElement->appendChild($album);
     
    $titre = $doc->createElement('titre');
    $titre->setAttribute('nom', 'ess');
    $album->appendChild($titre);
     
    $description = new DomElement('description', 'album');
    $titre->appendChild($description);
     
    echo $doc->saveXML();

    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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <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>
      <album nom="test">
        <titre nom="ess">
          <description>album</description>
        </titre>
      </album>
    </music>

  10. #10
    Membre régulier 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
    Points : 107
    Points
    107
    Par défaut
    Merci beaucoup maintenant ca marche bien en faite je m'etais compliqué la vie et c'est pour ca que ca ne metté pas bien en forme.

    Merci.

+ 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