modifier un fichier XML

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : modifier un fichier XML

par regne » 30 juil. 2007, 18:12

Au top !!!


Merci a tous ;-)

je met résolu !

par Truc » 30 juil. 2007, 18:07

ahh... et bien supprime le "echo" pour voir :wink:

par regne » 30 juil. 2007, 18:05

si je supprime juste le echo ca enregistre mais ca affiche pas le resultat?

En faites moi je voudrais juste ne pas avoir mes image qui s'affiche...

par Truc » 30 juil. 2007, 18:01

Oui mais il faut bien les enregistrer les modifications donc tu ne peux pas la supprimer.

Si tu ne passes pas de paramètre à asXML() tu afficheras le résultat (le xml sera interprété sans htmlentities )

par regne » 30 juil. 2007, 17:34

merci pour utf8_encode() ca marche !


Par contre en utilisant la technique de supprimé et de réecrire la ligne, l'ordre de mes lignes change...

Et ca pose un probleme pour dans l'anim flash...

je vais essayer d'utiliser la technique de hubert avec la modification voir si ca ne change pas l'ordre de mes lignes...


edit :

Bon c'est super tout marche !!!

Merci beaucoup

et pour infos voici le code final :
//calcul du numero de l'image 
$num=($_POST['numero']-1); 

//creation contenu title 
$title=utf8_encode($_POST['title']); 

//on recup le fichier  
$xml = simplexml_load_file('../accueil/dewslider.xml'); 


//unset($xml->img[$num]);// supprime la 4ème balise img...  

$xml->img[$num]['title'] = $title; 
echo $xml->asXML('../accueil/dewslider.xml'); 
echo'<br>modif xml ok<br>';
Juste une derniere question cette ligne : echo $xml->asXML('../accueil/dewslider.xml');
je peux la supprimé ? ca affiche juste le resultat ?

par Truc » 30 juil. 2007, 17:03

Souci d'encodage.
Ajoute l'attribut "encoding" :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
et un coup de utf8_encode() sur les données

par regne » 30 juil. 2007, 16:44

Bon alors avec le code de Hubert tout marche.

(j'ai supprimé puis reajouter comme on avait commencé a le faire)

Par contre j'ai un probleme avec les "é" ca me donne ca : Warning: invalid character valueoutput conversion failed due to conv error in


une idée ?

merci

par Truc » 30 juil. 2007, 16:03

sur le net il dise :
SimpleXML accèpte addChild et addAttributes que dans sa version 1.151 livrée avec php 5.2


moi j'ai PHP 5.0.4 et simpleXML $Revision: 1.139.2.4 $
En effet... tu peux t'en passer comme dans le code d'Hubert
(des crochets en trop sur $xml->img[])
Au fait, plutôt que de détruire et recréer, vous avez essayé de modifier les données plutôt ?
Par étapes c'est mieux pour la compréhension... (et j'ai pas d'excuses :lol: )

par Hubert Roksor » 30 juil. 2007, 15:44

Essaie de remplacer le code que tu as posté par ça
//calcul du numero de l'image 
$num=($_POST['numero']-1); 

//creation contenu title 
$title=$_POST['title']; 

//on recup le fichier  
$xml = simplexml_load_file('../accueil/dewslider.xml'); 


unset($xml->img[$num]);// supprime la 4ème balise img...  

$img = $xml->img[]; 
$img['src'] = 'accueil/img/'.$newimg; 
$img['title'] = $title;

echo $xml->asXML('../accueil/dewslider.xml');
Au fait, plutôt que de détruire et recréer, vous avez essayé de modifier les données plutôt ?
$xml->img[$num]['src'] = 'accueil/img/'.$newimg; 
$xml->img[$num]['title'] = $title;

par regne » 30 juil. 2007, 14:56

Merci beaucoup !

Effectivement avec tes codes ca devrai aller...

Alors j'ai fait ca :
//calcul du numero de l'image
$num=($_POST['numero']-1);
$img2='img['.$num.']';
echo $img2;
//creation contenu title
$title=$_POST['title'];

//on recup le fichier 
$xml = simplexml_load_file('../accueil/dewslider.xml');


unset($xml->$img2);// supprime la 4ème balise img... 

$img = $xml->addChild('img');
$img->addAttribute('src', 'accueil/img/'.$newimg);
$img->addAttribute('title', $title);

echo $xml->asXML('../accueil/dewslider.xml');

et j'ai ce message

Code : Tout sélectionner

Fatal error: Call to undefined method SimpleXMLElement::addChild() in

J'ai regardé sur le net ca pourrait venir de mon serveur tu en pense quoi?

sur le net il dise :
SimpleXML accèpte addChild et addAttributes que dans sa version 1.151 livrée avec php 5.2


moi j'ai PHP 5.0.4 et simpleXML $Revision: 1.139.2.4 $

par Truc » 30 juil. 2007, 13:58

pour accèder a ton attribut title tu aurais due faire :
foreach ($xml->img as $img) 
{    
      echo  "Title : ".$img['title']." <br/>";
} 
un sous tableau pour les attributs.

Un apercu pour supprimer un élément et créer un autre:
$xml = simplexml_load_file('../accueil/dewslider.xml');

unset($xml->img[3] ); // supprime la 4ème balise img... 

$img = $xml->addChild('img');
$img->addAttribute('src', 'new_img.jpg');
$img->addAttribute('title', 'new_title');

echo $xml->asXML('../accueil/dewslider.xml');
Sinon il y a aussi le dom (plus simple pour la "grosse" manipulation de xml)
$dom = new DOMDocument();
 
$dom->load('../accueil/dewslider.xml');
$imgs = $dom->getElementsByTagName('img');
foreach ($imgs as $img) 
{
	if($img->getAttribute("src") == "accueil/img/3.jpg" ) // nom de l'image
	{
		$img_element = $dom->createElement('img'); // création d'un nouveau noeud
			
		$img_element->setAttribute("src", "accueil/img/6.jpg");
		$img_element->setAttribute("title", "titre_6");
		$img->parentNode->replaceChild($img_element,$img); //remplacement du noeud ayant comme attribut  src "accueil/img/3.jpg"  	
	}
}
echo $dom->save('../accueil/dewslider.xml');
à peu de choses près ça devrait être suffisant pour tes besoins

par regne » 30 juil. 2007, 12:53

d'accord, mais alors sur quoi je peux me basé pour essayer de modifier le xml ?

Tu veux dire que la balise title"" est vide, ou que je ne peux pas utiliser title ?

car pour mes essaie j'ai rempli les balise title...

par Truc » 30 juil. 2007, 12:32

il n'y a pas de valeur pour l'attribut "title" dans le xml montré.

par regne » 30 juil. 2007, 11:42

salut,

je suis toujours en galere avec ce xml...

j'ai fait :
if (file_exists('../accueil/dewslider.xml')) {
    $xml = simplexml_load_file('../accueil/dewslider.xml');

    var_dump($xml);
} else {
    exit('Echec lors de l\'ouverture du fichier ../accueil/dewslider.xml.');
}

foreach ($xml->img[0]->title as $origine_title) {
    
        echo $origine_title;
       
    
}
et biensure ca ne marche pas...

voila ce qui s'affiche quand je charge la page :
object(SimpleXMLElement)#1 (1) { ["img"]=> array(5) { [0]=> object(SimpleXMLElement)#2 (0) { } [1]=> object(SimpleXMLElement)#3 (0) { } [2]=> object(SimpleXMLElement)#4 (0) { } [3]=> object(SimpleXMLElement)#5 (0) { } [4]=> object(SimpleXMLElement)#6 (0) { } } }

et mon echo n'affiche rien...

par Sékiltoyai » 29 juil. 2007, 16:49

Non, pour utiliser simpleXML, tu charges le fichier distant avec simplexml_load_file() et tu le traites avec les fonctions SimpleXML. Il n'y a aucune difficulté et si tu peux récupérer le fichier par fopen(), tu peux le charger dans simpleXML.