IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[DOM] Ajouter un nœud dans un fichier XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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



    ...

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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


  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut



    PHP5 : DOM







    ...

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Modèle à adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é)

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    merci, mais une autre question

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



    ...

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    $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?



    ...

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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.

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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



    ...

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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.

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    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>



    ...

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Bien, en cas essayez de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dom->documentElement->appendChild($fiche);
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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)

  13. #13
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par julp Voir le message
    Bien, en cas essayez de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dom->documentElement->appendChild($fiche);
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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



    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/04/2010, 21h26
  2. [DOM]ajouter une ligne dans un fichier xml
    Par aroua dans le forum APIs
    Réponses: 1
    Dernier message: 21/04/2008, 17h25
  3. [DOM] Insertion d'élément dans un fichier XML en PHP
    Par marcus13 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 03/04/2008, 13h51
  4. Comment ajouter un élément dans un fichier XML
    Par sorilazer dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 04/06/2007, 21h56
  5. [DOM] Modifier un noeud dans un fichier XML
    Par erivoil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/01/2007, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo