besoin d'aide pour modification dans un fichier XML

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par kenshuri, 2 Mai 2010.

  1. kenshuri
    kenshuri Nouveau WRInaute
    Inscrit:
    2 Mai 2010
    Messages:
    4
    J'aime reçus:
    0
    Bonjour à tous.

    Je suis arriver à un point où je butte complètement.
    J'appel à l'aide ! :oops:
    Je souhaite supprimer un noeud d'un fichier XML sur une page ou je récupère les éléments <title> à l'aide d une boucle. Puis grâce à un lien html j'aimerais qu'avec un onclick cela supprime l'item parent.

    Pour cela j'ai:
    le fichier xml qui se présente comme ca:
    Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <rss  version="0.91">
       <channel>
          <item>
             <title>Titre de ma news 1</title>
             <description>Contenu de ma news</description>
             <link>Lien facultatif</link>
             <pubDate>Date de publication</pubDate>
           </item>
    
           <item>
             <title>Titre de ma news 2</title>
             <description>Contenu de ma news 2</description>
             <link>Lien facultatif</link>
             <pubDate>Date de publication</pubDate>
           </item>
    
           <item>
             <title>Titre de ma news 3</title>
             <description>Contenu de ma news 3</description>
             <link>Lien facultatif</link>
             <pubDate>Date de publication</pubDate>
           </item>
       </channel>
    </rss>
    
    Affin de supprimer une de ces news j'ai une bibliothèque de fonction, avec, pour la suppression, dans un fichier XML.php:

    Code:
    <?php
    class Xml {
    
       //--- propriétés ---
       private $dom ;                    // objet dom pour parser le document xml
       private $noeud ;                  // nom du noeud actuellement parcouru
       private $item ;                   // item actuel
       private $num ;                    // numero de l'item correspondant au noeud parcouru
       private $eob ;                    // fin de parcourt du noeud
       private $nomficxml="" ;              //  nom du fichier xml
       private $chaineXML ;              // nom de la chaine XML
         
    //--- constructeur ---
       public function Xml ($chaineXML="") {
          $this->dom = new DomDocument();
    	  if ($chaineXML != "") {
    	     $this->chaineXML = $chaineXML ;
    	     $this->dom->loadXML($chaineXML);
    	  }
       }
    
       //--- chargement d'un fichier XML ---
       public function recupFic ($nomficxml) {
          $this->nomficxml = $nomficxml ;
          $this->dom->load($nomficxml);
       }
       
       //--- positionnement sur le premier noeud d'un nom précis ---
       public function premier ($item) {
          $this->noeud = $this->dom->getElementsByTagName($item) ;
    	  $this->num = -1 ;
    	  $this->item = $item ;
    	  $this->eob = false;	 
    	  $this->suivant () ; 
       }
       
       //--- lecture du noeud suivant ---
       public function suivant () {
          $this->num++ ;
          $this->eob = ($this->noeud->item($this->num)==null) ;
       }
       
       //--- récupération de l'information contenue dans un noeud ---
       public function info ($noeud) {
          return $this->noeud->item($this->num)->getElementsByTagName($noeud)->item(0)->firstChild->nodeValue ;
       }
    
    //--- enregistrement dans un fichier XML ---
       public function eob () {
          return $this->eob;
       }
    
    
    //--- suppression d'un noeud ---
       public function supprimer () { 
          $element = $this->noeud->item($this->num) ;
          $result = $this->dom->documentElement->removeChild($element);
    	  $this->sauve () ;
       }
       
    
    //--- enregistre le nouveau dom dans le fichier ou le document ---
       public function sauve () { 
          if ($this->nomficxml != "") { 
             $this->dom->save($this->nomficxml) ;
          } else {
             $this->dom->saveXML($this->chaineXML) ;
    	  }
       }
       
    }
    ?>
    
    et enfin ma page de suppression pour le moment mais je n'arrive pas à aller plus loin, tout mes tests on était des échecs... :cry:
    note: - la fonction Calque créer simplement une <div>
    - la fonction Remplir sert à remplir la <div>

    Code:
    <?php
    //creation d'un calque pour afficher les news à supprimer
    $supprnews = new Calque ($id="suppr_news", 
    					$left=390, 
    					$top=20, 
    					$width=375, 
    					$height=450, 
    					$align="left", 
    					$centre=false, 
    					$image,
    					$color="", 
    					$deplace=false, 
    					$redim=false, 
    					$efface=false, 
    					$visible=true
    					);
    		
    $xmlNews = new XML("");
    
    $xmlNews -> recupFic($ficNews);
    
    $contenusupprnews = "<span class='normalblanc' style='display: block ;margin-left: 10px;'>";
    
    $contenusupprnews .= "<span style='display: block ;margin: 12px 0 0 0; text-align: center; '>Supprimer une news:<br /></span>";
    
    $xmlNews -> premier ("item");
    
    while (!$xmlNews->eob()) {
    	                        $contenusupprnews .= "<strong>".$xmlNews->info("title")."</strong>"."  -> <a href='#' onclik=''>Supprimer cette news X</a><br />" ;
    				$contenusupprnews .= "<br /><br />";
    				$xmlNews -> suivant ("item");
    				}
    
    $contenusupprnews .= "</span>";
    $supprnews ->Remplir($contenusupprnews);
    $total .= $supprnews->getComplet();
    ?>
    
    Je sèche complètement ! Après moultes essaies je n'y arrive vraiement pas :cry:
    Quelqu'un pourrait il m'aiguiller s'il vous plait? :aie:
    Merci beaucoup de votre aide !

    Kenshuri.
     
  2. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Euh... C'est quoi la question? Comment faire pour qu'un clic sur un lien supprime un noeud? Ben tu crées un nouveau script (delete.php par exemple), qui prend comme paramètre le numéro de le l'item à supprimer, et qui va charger le fichier, faire une boucle sur les items du flux RSS jusqu'à trouver le bon, le supprimer, et sauvegarder. Pas besoin d'un onclick, un simple a href suffira...

    Jacques.
     
  3. kenshuri
    kenshuri Nouveau WRInaute
    Inscrit:
    2 Mai 2010
    Messages:
    4
    J'aime reçus:
    0
    C'est ce que j'ai dus faire pour rajouter des <item> mais n'y aurait il pas un moyen de faire tout ça dans une seule et même page ??

    Dans le cas ou j'opte pour cette méthode, avec le href cela va me faire changer de page, il faudra que je fasse une redirection dans la page delete.php pour retourner sur le menu de suppression non?

    Pour la numération des <item>, sont-il 'auto-numérotés' ? ou dois-je leur attribué une id par exemple?

    Merci.

    Kenshuri
     
  4. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Ben la page elle est affichée sur le poste du client, et la modif doit être faite côté serveur, donc il doit forcément y avoir un appel au serveur pour qu'il fasse la modif. Maintenant:
    - tu peux le faire dans le même script avec un argument particulier qui lui dit qu'au lieu d'afficher, il doit effacer quelque chose, mais tu ne vas pas forcément y gagner en clarté
    - de toutes façons il va falloir réafficher la page pour montrer le résultat de l'opération, donc les trucs genre Ajax et compagnie ça ne me paraît pas forcément utile
    - mais si tu veux vraiment le faire, il va falloir à la fois faire l'appel côté serveur et modifier l'affichage sur le poste du client.
    - effectivement, c'est une bonne idée après le delete de faire un redirect (plutôt que de réafficher directement dans le même script), ça évite les problèmes de reload

    Vu que dans le flux il n'y a pas d'ID, la meilleure solution est probablement d'utiliser un compteur qui est incrémenté à chaque passage dans la boucle (que ce soit à l'affichage pour créer le lien ou à la suppression pour trouver celui à effacer).

    Je m'interroge par contre sur la pertinence de stocker tes données dans un flux RSS? Pourquoi ne pas mettre les données en base, et générer le flux RSS dynamiquement quand c'est nécessaire? Si ton flux grandit un tant soit peu, tu vas y gagner pas mal...

    Jacques.
     
  5. kenshuri
    kenshuri Nouveau WRInaute
    Inscrit:
    2 Mai 2010
    Messages:
    4
    J'aime reçus:
    0
    Bonsoir Jacques,
    Merci beaucoup de toutes ces précisions, ça m'éclaire beaucoup et j'arrive a concevoir l'algorithme.

    Alors en faite je désire le faire dans un fichier xml, je pense que vous l'avez comprit, pour que sur le site je puisse stocker et afficher mes news, et, en même temps qu'elles soient générées dans un flux RSS afin de n'avoir qu'une seule chose à modifier.Je fais ainsi car je suis en 1ère année de BTS info et que mon TP doit se faire comme cela afin de ce familiariser avec AJAX.

    Cela dit, il est vrai qu'un stockage en base de donnée sera largement moins lourd et beaucoup plus simple à la réalisation. D'autant plus que d'après vous il semblerai que l'on soit capable depuis la base de donnée de généré un flux RSS. Ça serait bien pratique et j'en prend note. De plus l'ajout de noeud se fait toujours apparemment dans un seul sens (du plus vieux au plus récent) et donc à moins de faire un script de lecture à l'envers le nouveau noeud sera afficher en dernier. Un problème que j'éviterai avec les bases de données dans le futur.

    Merci encore.
    Kenshuri.
     
  6. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Ben si tu dois faire de l'Ajax on est un peu à côté, là... Ceci dit, faire de l'Ajax ne t'interdit pas de stocker les choses en BDD.

    Jacques.
     
Chargement...
Similar Threads - besoin aide modification Forum Date
Besoin d'aide concernant modification sur mon blog dans la barre URL. Développement d'un site Web ou d'une appli mobile 25 Juillet 2018
Besoin d'aide et de conseils avant grosse modification Problèmes de référencement spécifiques à vos sites 22 Mai 2013
Besoin d'aide pour comprendre mon Analyse Dareboost Débuter en référencement 24 Août 2019
Besoin d'aide pour configurer mon htaccess URL Rewriting et .htaccess 24 Octobre 2018
AJAX BESOIN D'AIDE Développement d'un site Web ou d'une appli mobile 2 Juin 2018
Besoin d'aide pour le référencement Débuter en référencement 25 Mai 2018
Une femme qui fait 2D animation sur Youtube et qui a besoin d'aide pour referencement Débuter en référencement 21 Janvier 2018
Besoin d'aide pour internet Débuter en référencement 2 Décembre 2017
Besoin d'aide pour bien positionner mon blog ! Débuter en référencement 9 Septembre 2017
Besoin d'aide pour Google Search Console Référencement Google 16 Juin 2017
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice