écrire dans un fichier xml

Résolu
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 - 12 avril 2008 à 14:21
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 - 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 !!!

30 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 19:37
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...)
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 avril 2008 à 11:17
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à.

   
3
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 avril 2008 à 14:42
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 !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 18:56
Hello,

$fichier = fopen("post.xml", "a");
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 avril 2008 à 19:00
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 !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 19:07
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.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 avril 2008 à 19:12
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 !!!
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 avril 2008 à 19:25
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 !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 19:27
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.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 avril 2008 à 19:28
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 ?
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 avril 2008 à 19:33
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 !!!
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 avril 2008 à 19:40
merci, vers quel fonctions dois je me tourné a ton avis ??

Si t'a besoin d'aide, MP !!!
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
13 avril 2008 à 09:48
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 !!!
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
13 avril 2008 à 12:01
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 !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 avril 2008 à 12:11
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.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
13 avril 2008 à 12:18
merci, donc ça veut dire que c'est pareil que $dom !!

Si t'a besoin d'aide, MP !!!
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
13 avril 2008 à 13:04
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 !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 avril 2008 à 13:09
T'es en PHP4.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
13 avril 2008 à 13:12
non en 5.2.5 sur wamp avec l'extension domxml activé !!

Si t'a besoin d'aide, MP !!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 avril 2008 à 13:17
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.
0
Rejoignez-nous