Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
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 15/09/2007, 19h47   #1
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
Par défaut [DOM] Ajouter un nœud dans un fichier XML

Salut tt le monde

J'ai lu le tuto avant de poster, malheureusement mes connaissances coté WEB sont un peu limités donc j'ai pas pu tout comprendre (ca viendra avec le temps)

donc voila mon probleme

j'ai un fichier personnes.xml , qui a comme structure :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
<table>
 
	<fiche type="...">
	<struct>
		<var name="id">..</var>
		<var name="nom"><string>...</string></var>
		<var name="prenom"><string>...</string></var>
		<var name="statut">..</var>
		<var name="pageWebPerso"><![CDATA[www]]></var>
		<var name="pageWebGRMIAO"><...></var>
		<var name="photo">...</var>
		<var name="distenctions">...</var>
		<var name="implicationprojet">...</var>
	</struct></fiche>
 
</table>
j'ai une page html qui contient un formulaire pour remplir ces informations (fiche type , id , nom , prenom ...) et je veux que quand on rempli le formulaire, ces informations s'ajoutent dans le fichier xml, a l'interieur du noeud table sous le format :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
	<fiche type="...">
	<struct>
		<var name="id">..</var>
		<var name="nom"><string>...</string></var>
		<var name="prenom"><string>...</string></var>
		<var name="statut">..</var>
		<var name="pageWebPerso"><![CDATA[www]]></var>
		<var name="pageWebGRMIAO"><...></var>
		<var name="photo">...</var>
		<var name="distenctions">...</var>
		<var name="implicationprojet">...</var>
	</struct></fiche>

et je ne sais pas quoi faire aprés le load du fichier XML, je suis un peu perdu

merci de m'aider



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 19h57   #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
Qu'avez-vous déjà codé ? Qu'utilisez-vous comme extension pour cela ? Ce ne sont pas les choix qui manquent :
  • PHP 4 : DOMXML
  • PHP 5 : DOM, SimpleXML, XMLReader/XMLWriter
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 20h01   #3
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90



PHP5 : DOM







...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 21h13   #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
Modèle à adapter :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
define('FICHIER_XML', 'fichier.xml');
 
$vars = array(
    'id',
    'prenom',
    'statut',
    'pageWebPerso',
    'pageWebGRMIAO',
    'photo',
    'distenctions',
    'implicationprojet'
);
 
$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->formatOutput = TRUE;
$dom->load(FICHIER_XML);
 
// Création fiche
$fiche = $dom->createElement('fiche');
$fiche->setAttribute('type', $_POST['type']); // A contrôler ...
// Ajout de la fiche à la racine (table)
$dom->documentElement->appendChild($fiche);
// Création de struct
$struct = $dom->createElement('struct');
// Ajout de la struct à la fiche
$fiche->appendChild($struct);
// Création des var à partir de $_POST, on suppose que les champs portent les mêmes noms
foreach ($vars as $v) {
    if (isset($_POST[$v])) {
       $var = $dom->createElement('var', $_POST[$v]);
       $var->setAttribute('name', $v);
       $struct->appendChild($var);
    }
}
 
// Sauvegarde
$dom->save(FICHIER_XML); // Attention il sera écrasé !
(non testé)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 22h46   #5
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
merci, mais une autre question

comment sauvegarder sans ecraser le contenu ? (c'est a dire ajouter à la fin du fichier)



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2007, 00h20   #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
Citation:
Envoyé par Mo_Poly
comment sauvegarder sans ecraser le contenu ? (c'est a dire ajouter à la fin du fichier)
ça n'a aucun sens pour un fichier structuré comme XML : le document est intégralement chargé en mémoire sous la forme d'un arbre (DOM) puis manipulé avant d'être éventuellement sauvegarder. Il n'y a aucune "perte" mis à part les éléments que vous supprimez de l'arbre (à moins d'une erreur de programmation ou conception). Si vraiment vous avez peur de l'écraser il suffit de changer la valeur du paramètre de la méthode save
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2007, 20h15   #7
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
Citation:
$dom->save(FICHIER_XML); // Attention il sera écrasé !

ma question c'etait par rapport a cela

d'aprés ce que j'ai compris. si jai plusieurs noeuds dans mon fichier, et jtuilise ta methode pour ajouter un noeud, les autres noeuds seront ecrasés par ce dernier!! j'ai mal compris peut etre?



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2007, 21h29   #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
Ok je vois : le commentaire vous met simplement en garde car je n'ai pas testé le code et s'il y a une erreur vous risqueriez de perdre l'ensemble de vos données (il vaut mieux être prudent). Ce n'est pas lié au "langage" XML lui-même ou aux manipulations effectuées, car vous conserverez tous les noeuds que vous n'avez pas supprimé vous-mêmes par programmation (méthode removeChild par exemple) à moins bien sûr d'une erreur.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2007, 21h24   #9
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
mais j'ai un autre probleme maintenant


a mon premier message j'ai ecrit que la structure de mon fichier XMl etait la suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<fiche type="...">
	<struct>
		<var name="id">..</var>
		<var name="nom"><string>...</string></var>
		<var name="prenom"><string>...</string></var>
		<var name="statut">..</var>
		<var name="pageWebPerso"><![CDATA[www]]></var>
		<var name="pageWebGRMIAO"><...></var>
		<var name="photo">...</var>
		<var name="distenctions">...</var>
		<var name="implicationprojet">...</var>
	</struct></fiche>

mais en réalité elle est de cette forme

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<mysql>
<database name="personnes">
<table>
<fiche type="...">
	<struct>
		<var name="id">..</var>
		<var name="nom"><string>...</string></var>
		<var name="prenom"><string>...</string></var>
		<var name="statut">..</var>
		<var name="pageWebPerso"><![CDATA[www]]></var>
		<var name="pageWebGRMIAO"><...></var>
		<var name="photo">...</var>
		<var name="distenctions">...</var>
		<var name="implicationprojet">...</var>
	</struct></fiche>

les 3 balises <mysql> <database name="personnes"> et <table> seront fermés a la fin du fichier XML, mais le probleme c'est que quand j'ajoute un noeud, ca s'ajoute aprés la fermeture de ces 3 balises donc ce n'est pas bon, j'ai essayé 36000 trucs mais je ne saisie malheureusement encore le concept

quelqu'un pourrais peut etre m'aider ?


merci



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2007, 21h51   #10
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
Et sur quels critères savez-vous où doit être réalisée l'insertion d'une <fiche> car j'imagine que vous avez probablement plusieurs <table> ou <database> ? Il faut trouver ce qui sera le noeud parent ou un noeud frère pour réaliser l'ajout, ça ne devrait demander que peu de modifications dans le code ci-dessus.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2007, 22h19   #11
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
Citation:
Envoyé par julp Voir le message
Et sur quels critères savez-vous où doit être réalisée l'insertion d'une <fiche> car j'imagine que vous avez probablement plusieurs <table> ou <database> ? Il faut trouver ce qui sera le noeud parent ou un noeud frère pour réaliser l'ajout, ça ne devrait demander que peu de modifications dans le code ci-dessus.

je sais que ca l'air bizarre mais la structure du fichier XML que j'ai est la suivante ( c'est pas moi qui l'a fait , je dois travailler avec et me taire )



<mysql>
<database name="personnes">
<table>


plusieurs :

<fiche type="...">
<struct>
<var name="id">..</var>
<var name="nom"><string>...</string></var>
<var name="prenom"><string>...</string></var>
<var name="statut">..</var>
<var name="pageWebPerso"><![CDATA[www]]></var>
<var name="pageWebGRMIAO"><...></var>
<var name="photo">...</var>
<var name="distenctions">...</var>
<var name="implicationprojet">...</var>
</struct></fiche>


et a la fin du fichier


</mysql>
</database>
</table>



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 00h23   #12
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
Bien, en cas essayez de remplacer :
Code :
$dom->documentElement->appendChild($fiche);
Par :
Code :
$dom->documentElement->firstChild->firstChild->appendChild($fiche);
(requiert que la propriété preserveWhiteSpace soit mise à FALSE sinon il faudra procéder autrement : méthode getElementsByTagName() ou une expression XPath)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 05h23   #13
Membre régulier
 
Étudiant
Inscription : février 2007
Messages : 378
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2007
Messages : 378
Points : 90
Points : 90
Citation:
Envoyé par julp Voir le message
Bien, en cas essayez de remplacer :
Code :
$dom->documentElement->appendChild($fiche);
Par :
Code :
$dom->documentElement->firstChild->firstChild->appendChild($fiche);
(en admettant que la propriété preserveWhiteSpace soit mise à FALSE)

yessssssss


t'es le meilleur, merci du fond du coeur je reviendrai surment avec d'autres questions



...
Mo_Poly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h05.


 
 
 
 
Partenaires

Hébergement Web