écrire dans un fichier xml [Résolu]

nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 12 avril 2008 à 14:21 - Dernière réponse : nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention
- 13 avril 2008 à 16:59
Salut,

j'ai un code php pour écrire dans un fichier XML qui ne marche pas comme je voudrai : je voudrai que le message et le pseudo s'ajoute dans le fichier XML sauf que ça remplace au lieu de s'ajouter !!!

<?php

header('Content-Type: text/xml');

$xml = '<?xml version="1.0" encoding="iso-8859-1" ?>';

$xml .= '\n<chat>\n';

if(isset($_POST['pseudo']) and isset($_POST['message'])) {

 $xml .= '<post>\n';

 $xml .= '<pseudo>'.$_POST["pseudo"].'</pseudo>\n';

 $xml .= '<message>'.$_POST["message"].'</message>\n';

 $xml .= '</post>\n';

}

$xml .= '</chat>';

$fichier = fopen("post.xml", "w+");

fwrite($fichier, $xml);

fclose($fichier);

header('Content-Type: text/html');

?>

<!-- Code colorisé via http://tools.codes-sources.com/colorizeCode.aspx
(Merci de conserver ce commentaire si vous utilisez ce code html) -->

Si t'a besoin d'aide, MP !!!
Afficher la suite 

30 réponses

Répondre au sujet
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 12 avril 2008 à 19:37
+3
Utile
Toute la doc php est en français.
http://fr3.php.net/manual/fr/book.dom.php
(ils ont changé le format de la doc, tien...)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de malalam
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 13 avril 2008 à 11:17
+3
Utile
Hello,

comment tu te débrouilles pour tomber sur un exemple qui s'avère faux...??

$dom 
= new 
DOMDocument
(
'test1'
);
> on instancie un objet de type DOM. Mais ce constructeur prend en paramètres la version du document XML et son encodage. : $oDom new DOMDocument('1.1', 'utf-8');
Et pas autre chose. Donc 'test1' n'a aucun rôle ici. Et même en DOMXML  (la version PHP4) il ne me semble pas que ela fonctionne ainsi.


$dom
->
load
(
$fichier
);
=> on crée un document  via un fichier XML (on le charge, là).
Dans ce cas, le début du cocde devrait être :
$fichier = 'text.xml';
$dom = new DOMDocument;
$dom->load($fichier);
Ou mieux :
$fichier = 'test.xml';
$dom = DOMDocument::load($fichier);





   
/*nouvelle balise <type>*/
    
$new_type 

$dom
->
createElement
(
'type'
);
    
$type_content 

$dom
->
createTextNode
(
'ppt'
);
    
$letype 

$new_type
->
appendChild
(
$type_content
);
    
$lefile 

$new_file
->
appendChild
(
$new_type
); pourquoi ne pas mettre $letype ???
    
/*on rattache tout le <file> au DOM*/
    
$dom
->
appendChild
(
$new_file
);

=>
- on crée un noeud élémént qui s'appelle 'type'. Pour le créer, on doit le faire à partir de notre objet document (donc $dom).
- on crée un noeud texte dont la valeur est 'ppt'. Même remarque que précédemment, cela passe par le document.
- on rattache le noeud texte créé à l'élément créé au-dessus (ça va donner : <type>ppt</type>)
- on rattache ce nouveau noeud au noeud précédent créé juste avant cette partie de l'exemple (via
$new_file 

$dom
->
createElement
(
'file'
); ), ce qui donne : <file>
<type>ppt</type></file>.
- finalement, on attache notre fragment de document au document : <file> devient alors la racine de notre document, et on a un truc du genre :
<?xml version="1.1" encoding="utf-8">
<file>
    <type>
       ppt
    </type>
</file>

Voilà.

   
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de malalam
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 12 avril 2008 à 14:42
0
Utile
header('Content-Type: text/xml');

$xml = '<?xml version="1.0" encoding="iso-8859-1" ?>';

$xml .= '\n<chat>\n';

if(isset($_POST['pseudo']) and isset($_POST['message'])) {

$xml .= '<post>\n';

$xml .= '<pseudo>'.$_POST["pseudo"].'</pseudo>\n';

$xml .= '<message>'.$_POST["message"].'</message>\n';

$xml .= '</post>\n';

}

$xml .= '</chat>';

$fichier = fopen("post.xml", "w+");

fwrite($fichier, $xml);

fclose($fichier);







Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 12 avril 2008 à 18:56
0
Utile
Hello,

$fichier = fopen("post.xml", "a");
Commenter la réponse de malalam
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 12 avril 2008 à 19:00
0
Utile
Salut,

merci de ta réponse malalam mais j'ai posté la question a juki_webmaster et il m'a dit que soit je jouait dans la cour des grand avec le DOM sois je faisait un truc pourri avec simplexml je crois !!! Le problème c'est que je ne sais pas comment faire car en fait je ne sais pas comment faire pour mettre mon texte entre le début et la fin !!!

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 12 avril 2008 à 19:07
0
Utile
Si tu veux ajouter tes balises au milieu, passe par DOM en effet.
Une écriture "normale" via fopen ne te permettra que de les ajouter au début ou à la fin.
Commenter la réponse de malalam
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 12 avril 2008 à 19:12
0
Utile
Et connais tu un tuto qui montre comment faire car je débute en DOM et je ne sais pas du tout comment m'y prendre !!!

merci d'avance !!!

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 12 avril 2008 à 19:25
0
Utile
au fait malalam comment se fait il que le colorateur syntaxique n'esr pas été pris en compte ???

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 12 avril 2008 à 19:27
0
Utile
Non je n'en connais pas.
Mais ce n'est pas compliqué dès l'instant ou on comprend la notion de document.
Un document, c'est tout ton flux.
Un document a toujours une racine.
<?xml version="1.1" encoding="utf-8" ?>
  <root>
  </root>
Chaque élément est créé via le document.
Puis il doit être attaché à un autre élément (la racine, par exemple).
<?xml version="1.1" encoding="utf-8" ?>
    <root>
        <element/>  

    </root>
Tout ceci fait qu'un document est constitué de noeuds. Il y a deux types de noeuds, les noeuds éléments, et les noeuds texte.
<?xml version="1.1" encoding="utf-8" ?>

    <root>

        <element>texte</element>  


    </root>
Un élément peut être constitué d'attributs
<?xml version="1.1" encoding="utf-8" ?>


    <root>


        <element name="nom">texte</element>  



    </root>

Et c'est tout.
Lis la doc de php.net sur DOM. Je reconnais qu'elle n'est pas très claire et plutôt bordélique. Mais elle est très pratique. L'extension DOM de php contient quasiment tout ce dont tu as besoin pour créer un document. Je dis quasiment parce qu'il peut manquer 2-3 trucs, mais ce sont des "trucs" dont tu n'auras jamais probablement jamais besoin, ou pas avant très longtemps, quand tu seras un expert en xml.
Commenter la réponse de malalam
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 12 avril 2008 à 19:28
0
Utile
Pour le colorisateur syntexique, je n'en sais rien. En général, cela fonctionne.
A moins d'avoir copié la source du colorisateur, et pas son output ?
Commenter la réponse de malalam
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 12 avril 2008 à 19:33
0
Utile
merci, non je n'ai pas copié la source enfin si au début seulement mais après j'ai copié la sortie output et pour la doc DOM es ce qu'elle est en français ??

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 12 avril 2008 à 19:40
0
Utile
merci, vers quel fonctions dois je me tourné a ton avis ??

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 13 avril 2008 à 09:48
0
Utile
Salut,

J'ai trouvé cette exemple mais il y  a une ou deux ligne que je ne comprend pas !!!

$dom = new DOMDocument('test1'); // a quoi sert cette ligne ??? qu'es-ce que test1 ???
    $dom->load($fichier); je ne comprend pas ce qu'est $fichier !!!
    /*nouvelle balise <file>*/
    $new_file = $dom->createElement('file');
    /*nouvelle balise <type>*/
    $new_type = $dom->createElement('type');
    $type_content = $dom->createTextNode('ppt');
    $letype = $new_type->appendChild($type_content);
    $lefile = $new_file->appendChild($new_type); pourquoi ne pas mettre $letype ???
    /*on rattache tout le <file> au DOM*/
    $dom->appendChild($new_file);
/*on enregistre dans un fichier*/
$dom->save("test.xml");

Merci d'avance et a++

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 13 avril 2008 à 12:01
0
Utile
Re malalam,

j'ai une dernière petite question :

- es-ce normal que tu est écris $odom ou devait on comprendre $dom ??

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 13 avril 2008 à 12:11
0
Utile
Je préfixe généralement mes variables par leur type, et pour les objets, je les préfixe généralement par un 'o'.
C'est tout.
Ensuite, j'ai repris l'écriture de l'exemple.
Commenter la réponse de malalam
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 13 avril 2008 à 12:18
0
Utile
merci, donc ça veut dire que c'est pareil que $dom !!

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 13 avril 2008 à 13:04
0
Utile
Re,

voici mon code, il ne marche pas, j'ai deux erreurs :

$fichier = 'post.xml';
$dom = new DOMDocument ('1.1', 'utf-8'); ligne 4
$dom -> load ($fichier); ligne 5


$new_post = $dom -> createElement ('post');
$new_pseudo = $dom -> createElement ('pseudo');
$new_message = $dom -> createElement ('message');
$pseudo_content = $dom -> createTextNode ($_POST['pseudo']);
$message_content = $dom -> createTextNode ($_POST['message']);
$lepseudo = $new_pseudo -> appendChild ($pseudo_content);
$lemessage = $new_message -> appendChild ($message_content);
$lepost = $new_post -> appendChild ($new_pseudo);
$lepost .= $new_post -> appendChild ($new_message);
$dom -> appendChild ($new_post);
$dom -> save ("post.xml");

erreurs :

Warning: domdocument::domdocument() expects parameter 2 to be long, string given in C:\Program Files\wamp\www\index.php on line 4

Fatal error: Call to undefined method domdocument::load() in C:\Program Files\wamp\www\index.php on line 5



Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 13 avril 2008 à 13:09
0
Utile
T'es en PHP4.
Commenter la réponse de malalam
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 13 avril 2008 à 13:12
0
Utile
non en 5.2.5 sur wamp avec l'extension domxml activé !!

Si t'a besoin d'aide, MP !!!
Commenter la réponse de nicomilville
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 13 avril 2008 à 13:17
0
Utile
domxml est dépréciée. Tu ne dois pas l'activer.
c'est DOM tout court. Là tu utilises l'extension php4, qui est dépréciée.
Commenter la réponse de malalam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

écrire dans un fichier xml - page 2