Page 1 sur 1

Fichier Xml + Suppression de balise

Posté : 30 mai 2009, 16:54
par Delph
Bonjour à tous,

Alors voilà j'ai un petit soucis avec un fichier xml qui me sert à faire des news sur un site
le fichier se trouve sous la forme de :

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?> <items> <item> <title>Test</title> <target>_parent</target> <description> Test </description> </item> <items>
J'ai donc crée un petit script php à l'aide fputs pour ajouter à la suite ( ou au début ? ) du fichier les nouvelles news. En gros sa me donne ça :
// Nom du fichier
$fichier = 'news.xml';

          $fp = fopen($fichier, $mode); 
	  // J'écrit dans le fichier	  
	  fputs($fp, "<item>");
	  fputs($fp, "<title>$nom</title>");	  
	  fputs($fp, "<target>_parent</target>");
	  fputs($fp, "<description>$commentaire</description>");	
	  fputs($fp, "</item>");
          fputs($fp, "</items>");
	  // Fermeture du fichier
	  fclose($fp);
  	echo '<p>News Ajoutées!</p>';
Sauf que la, j'ai un petit problème vu qu'il faudrais que ma news la plus récente soit en premier, donc il faudrais que je réécrive tous le début du fichier xml à chaque fois ou alors si on peux positionner le pointeur pour écrire directement au bon endroit ? Je ne sais pas trop comment faire au mieux !
Si quelqu'un aurait une petite idée.

Merci d'avance

Posté : 30 mai 2009, 17:17
par Ryle
Tu ne peux effectivement pas écrire au milieu d'un fichier sans perdre d'informations.

Il te faut lire le fichier, stocker son contenu dans une variable et réécrire entièrement le fichier avec la partie que tu souhaites y intégrer...

Posté : 30 mai 2009, 17:24
par Delph
Ok merci d'avoir répondu !

Et le fait que ce soit un fichier xml ne pose aucun problème ?

Posté : 30 mai 2009, 20:03
par Ryle
Bah non :)

Ton fichier xml n'est rien de plus qu'un fichier texte. La difficulté est juste d'identifier à quel endroit tu dois insérer ta nouvelle actualité, et dans ton cas, ça semble toujours être après la 2ème ligne (après le <items>), donc devrait être assez simple à mettre en place :)

Posté : 01 juin 2009, 16:53
par Delph
Re bonjour,

Alors moi j'ai un peu avancer avec les petites précision que j'ai eu mais j'ai encore un petit problème surement pas bien méchant.

J'ai mon code :
<?php

// Efface les deux première ligne du fichier
Effacer("test.xml",1,2);

//Ouverture du fichier en lecture/écriture
$id = fopen("test.xml", "r+");
// On remet le curseur au début du fichier
fseek($id,0);
// On écrit l'arborescence du xml
fputs($id, '<?xml version="1.0" encoding="ISO-8859-1"?>');
fputs($id, '<items>');
// On ajout le titre
fputs($id, '<item>'.$titre.'</item>');
// Le message
fputs($id, '<description>'.$message.'</description>');
fputs($id, '</item>');
// Femeture du fichier
fclose($id);
?>
J'ai donc mon fichier .xml comme au dessus qui devrais normalement intégrer les données saisie dans mon formulaire. C'est pourquoi j'ai créer une fonction qui supprime les deux première ligne de mon fichier ( j'ai tester sa marche parfaitement ).

Et donc mon problème c'est donc au niveau de l'écriture, puisque mon code écrit par dessus les données déjà présente, j'ai bien regarder les différents mode d'ouverture/écriture de fichier et je ne comprend pas trop pourquoi.

Si quelqu'un aurait une idée, merci d'avance !

Posté : 01 juin 2009, 21:57
par Ryle
C'est parce que tu essayes d'écrire au début du fichier, alors que je t'ai dit que tu ne pouvais pas le faire sans perdre d'informations. En effet, à chaque ligne que tu vas ajouter à cet endroit, tu vas écraser celle qui s'y trouvait.

Il te faut :
- lire tout le contenu du fichier existant
- passer les deux première ligne
- insérer tes nouvelles actus
- placer à la suite le reste du fichier que tu as lu (pour garder les anciennes actus)