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 :

[XML] [DOM XML] editer un noeud dans un fichier XML


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 16
    Par défaut [XML] [DOM XML] editer un noeud dans un fichier XML
    Bonjour à tous,
    je voudrais éditer le contenu d'un noeud dans un fichier XML via un formulaire html en utilisant DOM XML.
    voici le code php dans mapage.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($setting as $fieldname=>$settingval){
            echo $fieldname.' de '.$rang.' = '.$settingval.'<hr />';//renvoie les valeurs attendues
    	$processor->editNodeValue($fieldname, $rang, $settingval);
    }
    et voici la méthode editNodeValue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function editNodeValue($nodename, $rang=0, $newdata){
    		if(is_string($nodename)&&$nodename!=''&&is_string($newdata)&&$newdata!=''){
    			$this->editedNode = $this->dom->getElementsByTagName($nodename)->item($rang);
    			$this->populatedNodeValue = $this->dom->createTextNode($newdata);
    			$this->editedNode->parentNode->replaceChild($this->populatedNodeValue, $this->editedNode);
    		}else{
    			$this->errors['removeData'] = 'Impossible de mettre à jour le noeud du fichier XML'.$this->XMLfile;
    		}
    }
    Malheureusement j'obtiens un erreur quand je teste :
    Notice: Trying to get property of non-object in C:\Program Files\EasyPHP 3.0\www\xxxxxx\xxxxxx\xxxxxxxxx\XMLprocessor.php on line 162

    Fatal error: Call to a member function replaceChild() on a non-object in C:\Program Files\EasyPHP 3.0\www\xxxxxx\xxxxxx\xxxxxxxxx\XMLprocessor.php on line 162
    Je pense que le problème se situe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->editedNode = $this->dom->getElementsByTagName($nodename)->item($rang);
    Help....

  2. #2
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 16
    Par défaut
    Bonjour,
    en modifiant un peu mon code j'ai finit pas me débarrasser de la première erreur.
    Mon code actuel :
    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
    public function editNodeValue($nodename, $rang=0, $newdata){
    		if(is_string($nodename)&&$nodename!=''&&is_string($newdata)&&$newdata!=''){
    			$this->editedNode = $this->dom->getElementsByTagName($nodename)->item($rang);
    			$this->populatedNodeValue = $this->dom->createTextNode($newdata);
    			echo '<pre>';
    			print_r($this->editedNode); // me renvoie bien 
                                                   DOMElement Object
                                                    (
                                                    )
    			echo '</pre>'; 
                            echo $newdata; // me renvoie le contenu de chacque champs
    		}else{
    			$this->errors['removeData'] = 'Impossible de mettre à jour le noeud du fichier XML'.$this->XMLfile;
    		}
    	}
    ensuite j'ajoute la méthode replaceChild :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function editNodeValue($nodename, $rang=0, $newdata){
    		if(is_string($nodename)&&$nodename!=''&&is_string($newdata)&&$newdata!=''){
    			$this->editedNode = $this->dom->getElementsByTagName($nodename)->item($rang);
    			$this->populatedNodeValue = $this->dom->createTextNode($newdata);
    		     $this->editedNode->replaceChild($this->populatedNodeValue, $this->editedNode);	
    		}else{
    			$this->errors['removeData'] = 'Impossible de mettre à jour le noeud du fichier XML'.$this->XMLfile;
    		}
    	}
    Mais quand je teste j'ai toujours la seconde erreur :
    Fatal error: Call to a member function replaceChild() on a non-object

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 16
    Par défaut
    Bon je pense que je ne suis plus très loin d'avoir la solution.... un petit coup de main pour la fin serai le bienvenu.
    voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public function editNodeValue($nodename, $newdata, $rang=0){
    		if(is_string($nodename)&&$nodename!=''&&is_string($newdata)&&$newdata!=''){
    			$this->editedNode = $this->dom->getElementsByTagName($nodename)->item($rang);
    			if ($this->editedNode==NULL){
    				$this->errors['editData'] = 'Le noeud '.$nodename.' n\'existe pas';
    			}else{
    				$this->editedNode->nodeValue = $newdata;
    				$this->dom->save($this->XMLfile);
    			}
    		}else{
    			$this->errors['editData'] = 'Impossible de mettre à jour le noeud du fichier XML'.$this->XMLfile;
    		}
    	}
    Mon XML est correctement mis à jour (les noeuds correspondants au champs du formulaire sont édités avec la valeur du champs)... MAIS....une balise fermante correspondant à nodename est ajoutée à la fin de mon fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <cadre>
    	<width>100</width>
    	<height>100</height>
    	<bgCol>0xFF0033</bgCol>
    	<bgImg/>
    	<bordCol>0xFFFFFF</bordCol>
    	<bordWidth>1</bordWidth>
    <cadre/></cadre>
    Que ce passe-t-il?

Discussions similaires

  1. [DOM] Modifier la valeur d'un noeud dans un fichier XML
    Par rob2-9 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/08/2008, 20h31
  2. [DOM] Modifier un noeud dans un fichier XML
    Par erivoil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/01/2007, 12h11
  3. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38
  4. [VB.NET] [XML] Suppression d'un noeud dans un fichier XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2004, 11h24

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