Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1461 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Insérer des données dans un fichier XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Insérer des données dans un fichier XML

n°983969
cosmoschtr​oumpf
dawa powered
Posté le 16-02-2005 à 20:49:13  profilanswer
 

Bonjour à tous
 
Je me suis fait une petite liste perso de mes DVD, jeux etc. Vu que je n'en ai pas des masses, j'ai préféré un fichier XML à une base de données.
 
Pour afficher la liste j'ai vilement pompé du code sur un tuto (rappelons que c'est pour mon usage perso), mais maintenant je trouve que c'est quand-même nettement plus chiant d'insérer à la main des données dans un fichier XML que dans un fichier texte.
Pourquoi je ne reste pas au fichier texte me direz-vous ? Parce que j'ai envie de faire du XML/php, parce qu'il paraît que XML c'est l'avenir :p
Et pourquoi je n'utilise pas une BDD ? Outre "la même raison", je trouve dommage d'utiliser un serveur en plus, de créer une base et tout, juste pour stocker 30 noms (bon, un peu plus, mais ça vaut vraiment pas le coup je pense).
 
Bref, maintenant je veux me faire une tite page qui me permettrait d'insérer des données dans un de mes fichiers XML.
Alors j'ai cherché un peu partout des tutos et aides pour ça, mais j'ai surtout trouvé des tutos pour insérer des données dans une BDD après avoir converti en flux XML (ce dont je ne comprend pas l'interêt au passage, mais ce n'est pas le sujet).
 
J'imagine que j'ai mal cherché, mais n'empêche que le résultat est le même, je ne sais pas comment insérer des nouvelles données dans un fichier XML existant.
 
Est-ce que vous sauriez m'aider, en me donnant des liens ou carrément en me disant comment faire ?
 
Merci ! :)

mood
Publicité
Posté le 16-02-2005 à 20:49:13  profilanswer
 

n°983992
Je@nb
Kindly give dime
Posté le 16-02-2005 à 21:15:59  profilanswer
 

Matte les fonctions de php, addchild etc ;)

n°983995
Je@nb
Kindly give dime
Posté le 16-02-2005 à 21:17:01  profilanswer
 

Ben sinon je suis con mais sur les tutos que ta trouvé ben c pareil sauf que tu remplaces les résultats de ta DB par ce que tu veux (ton formulaire ou autre je ne sais pas)

n°983998
esox_ch
Posté le 16-02-2005 à 21:17:41  profilanswer
 

Oui, admettons que tu stockes tes truc selon le shema :  
 
Titre/Type/Année/Metteur en Scene/Durée/Acteurs  
 
tu te fais un script qui insere :
 
<titre>$lenom</titre>
<type>$letype</type>
...
 
Dans ton fichier XML. Sinon tu peux le faire avec le parseur XML mais si t'a aucune connaissance en php tu risques de morfler :p ... Quoique ce serait pas plus mal d'apprendre qqch


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°984058
cosmoschtr​oumpf
dawa powered
Posté le 16-02-2005 à 21:49:03  profilanswer
 

Je@nb a écrit :

Matte les fonctions de php, addchild etc ;)


 
Heu, sur la doc php j'ai pas trouvé addchild :o
 

esox_ch a écrit :

Sinon tu peux le faire avec le parseur XML mais si t'a aucune connaissance en php tu risques de morfler :p ... Quoique ce serait pas plus mal d'apprendre qqch


 
C'est pas que je n'aie aucune connaissance en php, c'est que je n'ai aucune connaissance du côté xml et traitement de texte (parsing...) de php (par contre je gère correctement le côté BDD) [:aloy].
 
Sinon mon fichier XML est encore plus simple, c'est genre

Code :
  1. <liste>
  2.   <cat nom="">
  3.     <item>
  4.       <nom>...</nom>
  5.     </item>
  6.     <item>
  7.       <nom>...</nom>
  8.     </item>
  9.   </cat>
  10. </liste>


 
Je ne sais plus pourquoi j'avais mis cat (je voulais mettre d'autres cats mais en fait j'ai séparé les fichiers... tiens, pourquoi je me fais chier, je pourrais plutot faire plusieurs cats :o), mais j'avais mis item/nom en prévision d'ajouter des trucs sous item (genre, effectivement, type etc).
Je change pas <item> en <film>, parce que ca me sert pour des films, des jeux, des livres etc.
 
En fait je sais (théoriquement dirons-nous :p) ajouter des données à un fichier texte, c'est juste que je ne sais pas comment en ajouter "avant </liste>" par exemple... et je pensais qu'il y aurait une fonction de php qui permettrait ça sans passer par les fopen, fread & co...
 
merci ! :)

n°984065
Je@nb
Kindly give dime
Posté le 16-02-2005 à 21:52:33  profilanswer
 

Ooups, addChild c'est en delphi, en php matte plutot ça : http://www.php.net/manual/fr/funct [...] -child.php

n°984179
cosmoschtr​oumpf
dawa powered
Posté le 16-02-2005 à 22:41:43  profilanswer
 

ok merci je vais jeter un oeil :)

n°984751
cosmoschtr​oumpf
dawa powered
Posté le 17-02-2005 à 12:08:02  profilanswer
 

Bon, j'ai essayé de regarder ce qu'on trouve ici : http://fr2.php.net/manual/fr/ref.dom.php
Apparament DOM XML n'est pas dispo sur PhP5 (ce que j'utilise), et il faut utiliser DOM tout court, qui a l'air de faire globalement la même chose.
 
J'ai compris comment on insère un élément, mais pas comment on fait pour l'insérer après un autre élément. Je m'explique.
 
Mon fichier XML actuel est presque complexe (mais vraiment presque), pour simplifier pour le moment, utilisons ceci :

Code :
  1. <liste>
  2.   <item>
  3.     <nom>nom 1</nom>
  4.   </item>
  5. </liste>


Imaginons que je veuille insérer un item après celui existant. Pour insérer un item, je fais ceci :

Code :
  1. $item = $document->createElement("item" );
  2. $item = $document->appendChild($item);
  3. $nom = $document->createElement("nom","nom 2" );
  4. $nom = $item->appendChild($nom);


Le problème, c'est que cette méthode donne ceci comme résultat :

Code :
  1. <liste>
  2.   <item>
  3.     <nom>nom 1</nom>
  4.   </item>
  5. </liste>
  6. <item><nom>nom 2</nom></item>


Comme vous le voyez, il y a un problème. Comment puis-je faire pour dire que je veux que ça l'insère dans le noeud liste ?
 
Merci ! :)

n°984753
Je@nb
Kindly give dime
Posté le 17-02-2005 à 12:09:41  profilanswer
 

tu l'ouvres ton xml avant ?

n°984754
Je@nb
Kindly give dime
Posté le 17-02-2005 à 12:11:36  profilanswer
 
mood
Publicité
Posté le 17-02-2005 à 12:11:36  profilanswer
 

n°984763
cosmoschtr​oumpf
dawa powered
Posté le 17-02-2005 à 12:23:59  profilanswer
 

Ben en fait j'ai déjà regardé ces pages, mais j'ai rien vu qui me permette de faire ce que je veux, et honnêtement, je comprend rien aux contributions des utilisateurs, donc si la solution est dedans je ne la comprend pas, et si elle n'est pas dans les contributions, je ne la vois pas :o.
 
Voici mon code complet, le fichier "document.xml" comportant le contenu cité plus haut :
 

Code :
  1. $document = DOMDocument::load("document.xml" );
  2. $item = $document->createElement("item" );
  3. $item = $document->appendChild($item);
  4. $nom = $document->createElement("nom","nom de l'item 2" );
  5. $nom = $item->appendChild($nom);
  6. print $document->saveXML();


 
merci

n°984832
Je@nb
Kindly give dime
Posté le 17-02-2005 à 13:51:36  profilanswer
 

Je vais faire un test, j'ai pas bcp de temps là mais il me semblait pas que ct si difficile :)

n°985645
kalex
Posté le 18-02-2005 à 01:36:56  profilanswer
 

cosmoschtroumpf a écrit :

$document = DOMDocument::load("document.xml" );
 
$item = $document->createElement("item" );
$item = $document->appendChild($item); // le problème est là
$nom = $document->createElement("nom","nom de l'item 2" );
$nom = $item->appendChild($nom);
 
print $document->saveXML();

Pour faire un appendChild, il faut se positionner, là où l'on souhaite ajouter l'enfant (logique non ?).
 
Dans ton cas, tu pourrais faire :  
$document->documentElement->appendChild($item);
(documentElement représente la racine du document)

n°985893
cosmoschtr​oumpf
dawa powered
Posté le 18-02-2005 à 11:23:10  profilanswer
 

Effectivement, ça marche, merci :love:
 
 
Nouveau problème maintenant :
 
Pour simplifier j'avais mis mon document xml en <liste><item><nom>. Mais en fait, c'est comme ça :
 

Code :
  1. <liste>
  2.   <cat nom="cat 1">
  3.     <item><nom>item 1</nom></item>
  4.   </cat>
  5.   <cat nom="cat 2">
  6.     <item><nom>item 2</nom></item>
  7.   </cat>
  8. </liste>


 
Là, comment je fais pour choisir la cat que je veux ? J'ai regardé les fonctions que je pensait qui le faisaient, mais j'ai pas trouvé... :/
 
 
merci beaucoup ! :)

n°986185
kalex
Posté le 18-02-2005 à 14:47:03  profilanswer
 

Tu peux faire ça avec dom (getElementsById puis vérifier chaque élément avec getAttribute), mais une requête xpath est sûrement plus adapté.

Code :
  1. $item = $document->createElement("item" );
  2. $nom = $document->createElement("nom","nom de l'item 2" );
  3. $item->appendChild($nom);
  4. $xpath = new DOMXPath($document);
  5. $xNodes = $xpath->query('//cat[@nom="cat 1"]'); // c'est ça la requêtte ;)
  6. // $xNodes est une NodeList
  7. foreach($xNodes as $cat){
  8. $cat->appendChild($item); // Pour chaque élément de la liste on ajoute $item
  9. }


+ sur xpath : http://jerome.developpez.com/xmlxsl/xpath/

n°991707
cosmoschtr​oumpf
dawa powered
Posté le 23-02-2005 à 19:05:06  profilanswer
 

Yeah ça marche :love:
 
Bon je vais tester ça sur un vrai fichier maintenant :D
 
merci :)
 
Je reviendrais, j'ai quelques petites questions, notamment comment trier alphabétiquement une liste en xml, et comment mettre correctement en forme le xml quand on l'insère (là ça met tout sur la même ligne :()

n°991916
kalex
Posté le 23-02-2005 à 22:02:34  profilanswer
 

cosmoschtroumpf a écrit :

Yeah ça marche :love:
 
Bon je vais tester ça sur un vrai fichier maintenant :D
 
merci :)
 
Je reviendrais, j'ai quelques petites questions, notamment comment trier alphabétiquement une liste en xml


Avec XSL : http://www.php.net/manual/fr/ref.xsl.php
http://www.haypocalc.com/prog/xslt.php

Citation :

et comment mettre correctement en forme le xml quand on l'insère (là ça met tout sur la même ligne :()

$document->formatOutput = TRUE;

n°992365
cosmoschtr​oumpf
dawa powered
Posté le 24-02-2005 à 13:48:35  profilanswer
 

Kalex je te kiffe :love:
 
 
 
Heu... :o
 
 
Merci ça marche :D
Je reviendrais plus tard, quand j'en chierais pour modifier et supprimer des entrées :whistle:

n°993708
pc15268
Posté le 25-02-2005 à 16:56:57  profilanswer
 

Bonjour  
 
je cherche a faire la meme chose mais je n'y  arrive pas
 
Mon fichier XML
 

Citation :

<?xml version='1.0' encoding='ISO-8859-1' ?>
<reserve>
 <personne>
  <nom>Choulant</nom>
  <prenom>Noham</prenom>
 </personne>
</reserve>


 
je voudrais pouvoir rajouter des personne avec leur nom et prenom;
 
Le code

Code :
  1. <?
  2. $document = DOMDocument::load("donnee.xml" );
  3. $item = $document->createElement("personne" );
  4. $item = $document->documentElement->appendChild($item);
  5. $nom = $document->createElement("nom","DUPOND" );
  6. $nom = $item->appendChild($nom);
  7. $prenom = $document->createElement("prenom","paul" );
  8. $prenom = $item->appendChild($prenom);
  9. $document->saveXML();
  10.    
  11. ?>


 
Mais rien a faire rien ne veux s'inscrire ??
 
Merci de votre aide


Message édité par pc15268 le 25-02-2005 à 16:58:59
n°1734736
dazkiu
Posté le 20-05-2008 à 18:33:00  profilanswer
 

Il existe la même chose avec simpleXML ou alors il faut obligatoirement DOM ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Insérer des données dans un fichier XML

 

Sujets relatifs
Problème de Procedure avec liste chainée et fichierRécuperation de données
Incorporer des fichier à son exe[Eclipse] Recuperer un nom de fichier
VBS connaitre la date de modification d'un fichierproblème filtrage données table
Base de données MYSQL : champs avec des < \' >Pointeur sur un fichier !!
[ C vs Bash ] Détecter les lignes vides d'un fichier texte[C++]Fichier .cs
Plus de sujets relatifs à : Insérer des données dans un fichier XML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR