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

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 16
    Points : 12
    Points
    12
    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 à l'essai
    Inscrit en
    Septembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 16
    Points : 12
    Points
    12
    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 à l'essai
    Inscrit en
    Septembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 16
    Points : 12
    Points
    12
    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