écrire dans un fichier xml

[Résolu]
Signaler
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
-
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
-
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

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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...)
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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à.

   
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
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 !!!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,

$fichier = fopen("post.xml", "a");
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
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 !!!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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.
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
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 !!!
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
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 !!!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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 ?
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
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 !!!
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
merci, vers quel fonctions dois je me tourné a ton avis ??

Si t'a besoin d'aide, MP !!!
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
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 !!!
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
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 !!!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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.
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
36
merci, donc ça veut dire que c'est pareil que $dom !!

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

Si t'a besoin d'aide, MP !!!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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.