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] supprimer un noeud XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club Avatar de hicham285
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 40
    Points
    40
    Par défaut [DOM] supprimer un noeud XML
    salut les amis,
    j'ai essayé de supprimer un nœud (track ) dans mon xml avec plusieurs méthodes mais j'ai pas réussi
    voila mon xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE playlist SYSTEM "playlist.dtd">
    <playlist xmlns="http://xspf.org/ns/0/" version="1">
    <trackList>
    <track id="S1207928088"><title>Sandia</title><creator>*******</creator><location>http://******/mp3/1.mp3</location></track>
    <track id="S1207928715"><title>ee</title><creator>*********</creator><location>http://*****/mp3/2.mp3</location></track>
    </trackList>
    </playlist><
    et le DTD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!ELEMENT playlist (trackList)>
    <!ATTLIST playlist version CDATA #IMPLIED>
    <!ATTLIST playlist xmlns CDATA #IMPLIED>
    <!ELEMENT trackList (track+)>
    <!ELEMENT track (title,creator,location)>
    <!ATTLIST track id ID #REQUIRED>
    <!ELEMENT title ANY>
    <!ELEMENT creator ANY>
    <!ELEMENT location ANY>
    et mon code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (isset($_GET['id'])){
    $id=$_GET['id'];
    $songsup = $dom->getElementsByTagName("trackList")->item(0) ;
    $songsup1 = $dom->getElementById("$id") ;
    $songsup->removeChild($songsup1) ;
    $dom->save('play_liste.xml');
    }
    et j'ai essyé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (isset($_GET['id'])){
    $id=$_GET['id'];
    $xp = new DomXPath($dom);
    $del = $xp->query('/playlist/trackList/track[@id="' . $_GET['id'] . '"]/*');
    $item = $del->item(0);
    $item->parentNode->removeChild($item);
     
    $dom->save('play_liste.xml');
    }

  2. #2
    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
    Le code est incomplet Mais ceci semble fonctionner :
    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
    23
    24
    <?php
    $xml = <<< EOX
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE playlist SYSTEM "playlist.dtd">
    <playlist xmlns="http://xspf.org/ns/0/" version="1">
    <trackList>
    <track id="S1207928088"><title>Sandia</title><creator>Radio Essaouira</creator><location>http://radioessaouira.com/mp3/1.mp3</location></track>
    <track id="S1207928715"><title>ee</title><creator>Radio Essaouira</creator><location>http://radioessaouira.com/mp3/2.mp3</location></track>
    </trackList>
    </playlist>
    EOX;
    
    header('Content-type: text/plain');
    $_GET['id'] = 'S1207928088';
    $dom = new DomDocument;
    $dom->formatOutput = TRUE;
    $dom->preserveWhiteSpace = FALSE;
    $dom->validateOnParse = TRUE;
    $dom->loadXML($xml);
    if (isset($_GET['id'])) {
        $item = $dom->getElementById($_GET['id']);
        $item->parentNode->removeChild($item);
        echo $dom->saveXML();
    }
    La ligne importante étant en rouge : sans charger la DTD (comportement par défaut), votre attribut faisant office d'ID ne sera pas reconnu comme tel (par la méthode getElementById).

  3. #3
    Membre du Club Avatar de hicham285
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 40
    Points
    40
    Par défaut
    Meci de votre reponce
    mais il me donne toujours l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function removeChild() on a non-object in C:\wamp\www\radio_essaouira\player\new player\player_admin.php on line 20
    voila le code complet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $dom=new DomDocument();
    $dom->preserveWhitespace = false;
    $dom->formatOutput = true;
    $dom->load('play_liste.xml');
    $dom->validateOnParse = true;
    $dom->validate();
     
     
    if (isset($_GET['id'])){
    $id=$_GET['id'];
        $item = $dom->getElementById($id);
        $item->parentNode->removeChild($item);
    	 $dom->save('play_liste.xml');
    }

  4. #4
    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
    L'instruction indiquée est à mettre avant le chargement du document (méthodes load*). C'est logique, après c'est trop tard et elle ne sera pas prise en compte.

  5. #5
    Membre du Club Avatar de hicham285
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 40
    Points
    40
    Par défaut
    merci bouceaup ça marche
    tu peut me filer un lien d'un cour ou un tutorial de XPATh

+ 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] Création de noeud XML avec le DOM
    Par BkD35 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/12/2007, 11h09
  3. [XML DOM]Supprimer plusieurs noeud
    Par Shandler dans le forum APIs
    Réponses: 9
    Dernier message: 06/06/2007, 19h30
  4. [DOM] supprimer un noeud avec une expression xpath
    Par Fab88 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 01/06/2007, 11h45
  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