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] Retirer un noeud


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Points : 32
    Points
    32
    Par défaut [DOM] Retirer un noeud
    Bonjour,

    J'ai vu certains poste sur le même problème, je m'en suis déjà inspiré pour créer ma page, mais ça ne fonctionne toujours pas...

    Dans le XML suivant, je tente de retirer un "catalogue" en fonction de l'attribut "id" de la balise "titre".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <liste>
        <catalogue>
    		<titre id="5000">Cata1</titre>
    		<date start="1348005600" end="1349042340" />
    		<publish on="1347832800" off="1349042340" />
    		<folder>Folder1</folder>
    	</catalogue>
        <catalogue>
    		<titre id="2000">Cata2</titre>
    		<date start="1348005600" end="1349042340" />
    		<publish on="1347832800" off="1349042340" />
    		<folder>Folder2</folder>
    	</catalogue>
    </liste>
    voila ma page delete.php:

    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
    <?php
    $id = "5000";
    $data = new DOMDocument();
    $data->load('catalogue.xml');
    $racine = $data->documentElement;
    $catalogues = $data->getElementsByTagName('catalogue');
     
    foreach($catalogues as $catalogue)
    {
    	$titre=$catalogue->getElementsByTagName( "titre" )->item(0);
    	if($titre->getAttribute("id") == $id)
    	{
    		echo "juste avant le remove...";
    		$data->removeChild($data);
    	}
    $data->save('test.xml');
    }
    ?>
    j'ai aussi testé
    $data->removechild ($catalogue);

    mais rien à faire... je dois mal utiliser removeChild.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Voici comment ça s'est fait génériquement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	if($titre->getAttribute("id") == $id)
    	{
    		echo "juste avant le remove...";
    		//$data->removeChild($data);
    		$catalogue->parentNode->removeChild($catalogue);
    	}

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    J'ai finalement réussi à finaliser mon bout de code ^^
    Il me reste à retirer en fonction de l'ID que je vais passer en post. mais voila mon code fonctionnel:

    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
    <?php
    $data = new DOMDocument();
    $data->load('catalogue.xml');
    $xpath = new DomXpath($data);
    $racine = $data->documentElement;
    $query = '/liste/catalogue/titre[@id="5000"]';
    $catalogues = $xpath->query($query);
    foreach($catalogues as $catalogue)
    {
    	echo "juste avant le remove...";
    	$remove = $catalogue->parentNode;
    	$remove->parentNode->removeChild($remove);
    }
    $data->save('test.xml');
    ?>
    merci pour votre aide.

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si vous voulez utiliser xpath, il faut savoir tout de même ce que vous finalement obtenez. Le xpath vous utilisez retourne la balise titre, pas de catalogue: c'est pourquoi la mesure supplémentaire. (Vous mettez le nom de variable $catalogues etc, ça montre c'est pas tout à fait compris.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = '/liste/catalogue[titre/@id="5000"]';
    $catalogues = $xpath->query($query);
    foreach($catalogues as $catalogue)
    {
    	echo "juste avant le remove...";
    	$catalogue->parentNode->removeChild($catalogue);
    }

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2012
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    Merci Tsuji,
    effectivement je n'avais pas compris que je pouvais utiliser xpath comme ça
    c'est très pratique et m'évite de passer par un $remove inutile...
    Encore merci et bonne continuation

Discussions similaires

  1. [DOM] importer un noeud d'un fichier xml et le coller dans un autre fichier
    Par iznogoud36 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/06/2006, 12h55
  2. [DOM] Ajouter un noeud dans un noeud défini
    Par Hombre dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 15/05/2006, 19h48
  3. [PHP5][DOM]Supprimer le noeud courant
    Par panpan dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 03/05/2006, 15h01
  4. [DOM] Ajout de noeuds
    Par zevince dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 15/03/2006, 13h39
  5. [DOM] - Suppression de noeud.
    Par jacquesh dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 17/02/2006, 11h34

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