Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOMXML
DOMXML Forum d'entraide pour l'extension DOMXML permettant de manipuler des documents XML en PHP 4 (approche DOM). Avant de poster -> tutoriels DOMXML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/09/2007, 12h42   #1
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
Par défaut [DOMXML] Ecrire dans un fichier XML comme dans un TXT

Bonjour j'utilise actuellement un TOUT PETIT script qui me permet d'ajouter dans un fichier txt une nouvelle ligne a chaque validation du formulaire.

Code :
1
2
3
4
5
$mail = $_POST['_Mail'];
$fp=fopen("fichier.txt","a+");
fputs($fp,"$mail");
fputs($fp,"\n");
fclose($fp);
je voudrais faire exactement la même chose mais en générant un xml de ce format :

Code :
1
2
3
4
5
6
<?xml version="1.0"?>
<Wanliste>
<email>address1@example.tld</email>
<email>address2@example.tld</email>
<email>.</email>
</Wanliste>
Pouvez vous me venir en aide je n'ai aucune connaissance pour faire du XML et je n'ais rien compris a DOM et a simplxml
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2007, 13h33   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Par rapport à votre cas c'est simple puisque cela consiste à créer puis ajouter un nouvel élément email à l'élément racine :
Version DOM :
Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
define('FICHIER_XML', 'mon_fichier.xml');
 
if (is_file(FICHIER_XML)) {
    $dom = DomDocument::load(FICHIER_XML);
} else {
    $dom = new DomDocument;
    $racine = $dom->createElement('Wanliste');
    $dom->appendChild($racine);
}
$email = $dom->createElement('email', utf8_encode($_POST['_Mail']));
$dom->documentElement->appendChild($email);
$dom->save(FICHIER_XML);
Version SimpleXML :
Code PHP :
1
2
3
4
5
6
7
8
9
10
<?php
define('FICHIER_XML', 'mon_fichier.xml');
 
if (is_file(FICHIER_XML)) {
    $sxml = simplexml_load_file(FICHIER_XML);
} else {
    $sxml = new SimpleXMLElement('<Wanliste/>');
}
$sxml->addChild('email', utf8_encode($_POST['_Mail']));
$sxml->asXML(FICHIER_XML);
(non testé)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2007, 16h13   #3
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
Merci beaucoups pour votre réponse aussi rapide.
j'ais testé les deux solutions, mais le fichier xml ne ce génere pas.

comment corriger ce pb
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2007, 17h39   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Vous n'avez rien de plus précis quant au dysfonctionnement ? Avez-vous bien le droit d'écrire sur le fichier et/ou dans le répertoire parent ? Avez-vous des messages d'erreurs ? Autres ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2007, 18h33   #5
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
Dsl, je fais les choses à moitié.

pour la source avec simplexml, j'ai cette erreur
Code :
Fatal error: Call to undefined function: simplexml_load_file() in /xxxxx/yyyyy/www/zzzzz/post_result.php on line 3
la ligne 3 correspond a :
Code :
$sxml = simplexml_load_file(FICHIER_XML);

pour la source avec DOMxml, j'ai 2 erreurs
Code :
Warning: domdocument() expects at least 1 parameter, 0 given in /xxxxx/yyyyy/www/zzzzz/post_result.php on line 7
qui correspond a :
Code :
$dom = new DomDocument;
et
Code :
Fatal error: Call to undefined method: domdocument->createelement() in /xxxxx/yyyyy/www/zzzzz/post_result.php on line 8
qui correspond a
Code :
$racine = $dom->createElement('Wanliste');
Je n'ai auccun pb d'écriture sur mes dossiers car comme je le disais dans mon premier post j'écrit déja dans des fichiers TXT
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2007, 19h04   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Vous n'auriez pas une version 4 et non 5 [de PHP] par hasard ? Si tel est le cas vous ne disposez ni de l'extension DOM ni de l'extension SimpleXML

Sachant que certains hébergeurs, comme Free, proposent les deux. La différence se faisant au niveau de l'extension du fichier (.php => PHP 4, .php5 => PHP 5) sauf cas particulier.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2007, 20h36   #7
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
Géniale les deux méthodes marche. Pour ça j'ais changé l'extention php en php5.
Par contre ce qui m'etonne c'est que DOMXML existe depuis la version 4.3 de php. Donc pourquoi cela ne marchait pas avant que je change l'extention ?
surtout que mon hebergeur est en version 4.4

une derniere chose ou rajouter des sauts de lignes pour formater visuellement le fichier correctement. Acctuelement tout est a la suite.

Un grand merci pour votre aide
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2007, 22h55   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par christobale
Par contre ce qui m'etonne c'est que DOMXML existe depuis la version 4.3 de php. Donc pourquoi cela ne marchait pas avant que je change l'extention ?
surtout que mon hebergeur est en version 4.4
Les extensions DOM (PHP 5) et DOMXML (PHP 4) sont totalement différentes et n'ont rien à voir, surtout que la première permet de tirer parti de toutes les fonctionnalités objets qui ont été introduites à la version 5.

Citation:
Envoyé par christobale
une derniere chose ou rajouter des sauts de lignes pour formater visuellement le fichier correctement. Acctuelement tout est a la suite.
Pour PHP 5, seule l'extension DOM le permet (pas SimpleXML) il faut pour cela :
  • Mettre la propriété preserveWhiteSpace de l'objet DomDocument avant le chargement de votre fichier à FALSE (valeur par défaut TRUE)
  • Mettre la propriété formatOutput du même objet à TRUE pour qu'au moment de sa sauvegarde (méthode save*), il soit formaté.
Ce qui nous donne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
define('FICHIER_XML', 'mon_fichier.xml');
 
$dom = new DomDocument;
if (is_file(FICHIER_XML)) {
    $dom->preserveWhiteSpace = FALSE;
    $dom->load(FICHIER_XML);
} else {
    $racine = $dom->createElement('Wanliste');
    $dom->appendChild($racine);
}
$email = $dom->createElement('email', utf8_encode($_POST['_Mail']));
$dom->documentElement->appendChild($email);
$dom->formatOutput = TRUE;
$dom->save(FICHIER_XML);
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h49.


 
 
 
 
Partenaires

Hébergement Web