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 élément d'un sitemap


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Par défaut [DOM] Suppression d'un élément d'un sitemap
    Bonjour à tous,

    Ceci est mon premier post, donc soyez indulgent à moi

    En fait, je suis en train de réaliser un sitemap totalement dynamique permettant de pouvoir l'afficher et d'ajouter des pages (donc des entrées dans mon xml) en cliquant sur un lien.

    D'un point de Intégration tout est en ordre. Là ou je bloque, vous vous en doutez, c'est pour faire tourner tout cela

    Alors voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    	if(!empty($_GET['delete']) && is_numeric($_GET['delete'])) {
    		$x = new DomDocument('1.0', 'iso-8859-1');
    		$x->load(XML);
    		$items = $x->getElementsByTagName('sitemap');
    		$item = $items->item(0);
    		$xp = new DomXPath($x);
    		$del = $xp->query("//item[@id=".$_GET['delete']."]");
    		$item->removeChild($del);
    		$x->save(XML);
    	}
    Donc voilà j'aimerais pouvoir trouver un élement 'item' quelque soit son niveau hierarchique qui possède un attribut 'id' (attribut unique) pour pouvoir le supprimer. Son id est passé en paramètre ($_GET['delete]).

    Mon XML ressemble en quelque sorte à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="iso-8859-1"?>
    <sitemap>
      <text>Si vous êtes perdu ou si vous cherchez une page spécifique, bienvenue sur le &lt;strong&gt;sitemap&lt;/strong&gt;</text>
      <liste> 
        <item id="1">item 1
        <liste>
          <item id="2">item 1.1</item>
            <item id="3">item 1.2</item>
            <item id="4">item 1.3        
           	  <liste>
                <item id="18">item 1.1</item>
    Comme vous pouvez le voir, j'ai des éléments item à n'importe quel niveau.

    Je remercie celui (ou celle) qui m'aidera parce que là je sius complètement perdue.

    Merci beaucoup d'avance.

  2. #2
    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
    C'est un peu près ça, la méthode query renvoyant un objet DomNodeList et non un DomNode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (!empty($_GET['delete']) && is_numeric($_GET['delete'])) {
        $x = DomDocument::load(XML);
        $xp = new DomXPath($x);
        $del = $xp->query('//item[@id="' . $_GET['delete'] . '"]');
        if ($del->length == 1) {
            $item = $del->item(0);
            $item->parentNode->removeChild($item);
            $x->save(XML);
        } else {
            // die('Erreur ?');
        }
    }
    (non testé)

    Voir également la FAQ : Comment supprimer les noeuds correspondant à une expression XPath en PHP5 ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Par défaut Merci
    C'est parfait julp, maintenant je m'attaque à l'ajout à un endroit précis.

    En fait je passe en paramètre l'id du noeud et l'emplacement (en haut ou en bas).

    Voici mon code pour l'ajout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $x = DomDocument::load(XML);
    $xp = new DomXPath($x);
    $add = $xp->query("//item[@id=".$_GET['id']."]");
    $item = $add->item(0);
    $item->parentNode->appendChild($item);
    $user = $x->createElement('item');
    $user->setAttribute('id', $new_id);
    $item->appendChild($user);
    Là ce que j'aimerais ce serait créer un élement en dessous de celui passé en pramètre, juste en dessous au même niveau hierachique pas comme nouvel enfant de celui-ci.

    Merci encore.

  4. #4
    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
    Il n'y a pas de méthode toute faite pour une insertion après, il faut donc utiliser la méthode d'insertion avant (insertBefore) après s'être déplacé dans l'arbre :
    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
    $x = DomDocument::load(XML);
    $xp = new DomXPath($x);
    $add = $xp->query('//item[@id="'.$_GET['id'].'"]');
    $item = $add->item(0);
    // Création du nouvel élément
    $user = $x->createElement('item');
    $user->setAttribute('id', $new_id);
    // Insertion dans l'arbre après le noeud de référence
    if ($item->nextSibling) {
        // Si le noeud référent possède un frère
        $item->parentNode->insertBefore($user, $item->nextSibling);
    } else {
        // Si le noeud référent ne possède pas de frère
        $item->parentNode->appendChild($user);
    }
    (non testé)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Par défaut
    C'est parfait julp,

    Ceci dit lorsque je teste ton code, cela permet d'ajouter un élement après l'élément référencé et non pas avant comme tu le soutiens.

    Aurais-tu une solution pour mon problème ?

    Je te remercie

  6. #6
    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
    Citation Envoyé par Ptite Pupuce
    Ceci dit lorsque je teste ton code, cela permet d'ajouter un élement après l'élément référencé et non pas avant comme tu le soutiens.
    Ce n'est ni ce que j'ai écrit ni codé conformément à votre précédente demande

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

Discussions similaires

  1. Confirmation de la suppression d'un élément dans un SGBD
    Par Atharendil dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/09/2006, 13h40
  2. [DOM]Suppression attribut html
    Par kobe dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/07/2006, 10h49
  3. Réponses: 8
    Dernier message: 01/04/2006, 10h10
  4. [DOM] - Suppression de noeud.
    Par jacquesh dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 17/02/2006, 11h34
  5. Réponses: 14
    Dernier message: 01/12/2003, 17h47

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