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

Langage PHP Discussion :

Écrire dans un fichier XML


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut Écrire dans un fichier XML
    Bonjour,

    N'ayant jamais utilisé les fonctions sur les fichiers, je sollicite votre aide pour écrire dans un fichier XML.
    Voilà ayant une gallerie en flash faisant appel à la liste des images dans un fichier XML. Je souhaiterais réaliser un formulaire qui upload le fichier dans un répertoire et insère le nom dans le fichier XML.
    Je connais la fonction ouvrir un fichier, mais je ne sais pas comment naviguer à l'intérieur pour insérer les infos avant le dernier noeud. Soit dans mon exemple avant le noeud </gallery>

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <gallery frameColor="0xFFFFFF" frameWidth="15" imagePadding="20" displayTime="6" enableRightClickOpen="true">
    <image>
       <url>images/tall.jpg</url>
       <caption>Pellentesque turpis leo, dignissim ac, vestibulum quis, hendrerit quis, enim.</caption>
       <width>465</width>
       <height>700</height>
    </image>
    <image>
       <url>images/tall.jpg</url>
       <caption>Images can be tall...</caption>
       <width>465</width>
       <height>700</height>
    </image>
    <image>
       <url>images/wide.jpg</url>
       <caption>...or wide.</caption>
       <width>700</width>
       <height>465</height>
    </image>
     
    </gallery>
    Connaitriez-vous un bon tuto, ou pourriez-vous m'expliquer les grandes lignes pour effectuer ce genre d'opération, SVP.

    MErci de votre aide.

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Bonjour ,
    Il faut utiliser simpleXml pour jouer avec les fichiers xml.
    Concernant des exemples tu en trouveras pas mal justement dans la doc.
    N'hésite pas a demander si tu as un soucis.
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut
    Merci pour ta réponse,

    je t'avoue qu'après avoir regardé la doc, je ne comprends pas tout.

    Etape 1 : Ouverture de mon fichier XML.
    Dois-je utiliser fopen($filename, w) de php ou new SimpleXMLElement()

    Etape 2 : Une fois le fichier ouvert pour naviguer dans mon fichier, quelle fonction dois-je utiliser pour placer mon curseur d'insertion avant </gallery>

    Etape 3 : insertion de la balise <image> et de ses enfants
    Dois-je faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $image= new SimpleXMLElement($xmlstr);
    $image->addAttribute('image');
     
    $image->addChild('url', 'mon url');
    $image->addChild('caption', 'mon titre image');
    $image->addChild('width', '40');
    $image->addChild('height', '30');
    La balise </image> se fait-elle automatiquement, ou faut-il ajouter une ligne pour préciser?

    Etape 4 : Enregistrement des modifs avec fwrite() puis fermeture avec fclose().


    Merci de ton aide.
    La doc php n'est pas toujours explicite pour les novices.

  4. #4
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Pour l'ouverture effectivement faut passer par new simpleXmlElement() voir simpleXml_load_file()

    Ensuite il faut aller chercher le noeud dans lequel tu vas ajouter tes information avec children() une fois que tu y est tu dois ajouter tes enfants avec addChild().

    Enfin pour la sauvegarde il faut utiliser asXml() avec en parametres le nom du fichier Xml
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut
    Donc si je comprends bien je dois faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    $xml = simpleXml_load_file('adresse_mon_fichier_xml);
    
    foreach ($xml->children() as $key=>"</gallery>) {
    $monInsertionCaption="txt entre les balises xml"
    $width='50';
    //...
    addChildren('caption', $monInsertionCaption);
    addchiltren('width', $width);
    asXml($xml);
    }
    ?>

  6. #6
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    plutot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $xml = simpleXml_load_file('adresse_mon_fichier_xml');
    $gallerie = $xml->Children();
    $image = $gallerie->addChild("image")
    $image->addChild('url', 'mon url');
    $image->addChild('caption', 'mon titre image');
    $image->addChild('width', '40');
    $image->addChild('height', '30');
     
    $xml->asXml('adresse_mon_fichier_xml');
    c'est pas testé mais a un niveau prêt ça doit ressembler a ça .
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut
    Quand je test dans easyphp, j'obtiens le message d'erreur suivant :

    Fatal error: Call to undefined function: simplexml_load_file() in c:\program files\easyphp1-8\www\universdupainv2\essai\autoviewer\insertion.php on line 4

    Y'a-t-il une bibliothèque à installer?

    J'ai rajouté extension.php5

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut
    J'ai testé ça ne fonctionne pas, ça m'affiche mon code source, mais mon fichier xml reste identique.

    Je crois avoir trouvé un truc bizarre, à aucun endroit on ne précise que l'on veut ajouter des infos dans le noeud <gallery>.

    $gallerie = $xml->Children();

    ne faudrait-t-il pas préciser le nom dans Children?

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml = simpleXml_load_file('adresse_mon_fichier_xml');
    ceci fait que $xml est élément racine <gallery> donc si tu veux ajouter une image suffit de rajouter un enfant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $filename = 'adresse_mon_fichier_xml';
    $xml = simpleXml_load_file($filename); // $xml = noeud racine <gallery>
    $image = $xml->addChild("image"); // nouveau noeud
    $image->addChild('url', 'mon url');
    $image->addChild('caption', 'mon titre image');
    $image->addChild('width', '40');
    $image->addChild('height', '30');
    $xml->asXml($filename);
    ?>
    pour info, un fichier xml n'a pas réellement d'ordre, selon les API qui vont gérer la lecture du xml l'ordre sera différent mais pas forcément.
    pour avoir un ordre défini il faut lire le fichier avec des processor xml en parsant avec du xpath, en général pour le web on utilise le xsl mais d'autre existe comme le xquery.

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut
    je comprends pas ça ne fonctionne pas.

    Il suffit simplement de lancer le fichier php5 pourtant.
    Pourquoi easyphp m'affiche-t-il le code source et pas une page blanche?

  11. #11
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Citation Envoyé par selinav Voir le message
    je comprends pas ça ne fonctionne pas.

    Il suffit simplement de lancer le fichier php5 pourtant.
    Pourquoi easyphp m'affiche-t-il le code source et pas une page blanche?
    Peut etre un probleme d'install ou de conf ....utilise WAMP
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    Citation Envoyé par selinav Voir le message
    je comprends pas ça ne fonctionne pas.

    Il suffit simplement de lancer le fichier php5 pourtant.
    Pourquoi easyphp m'affiche-t-il le code source et pas une page blanche?
    évite d'utiliser l'extension .php5 et remplace la par .php
    sinon il faut configurer quelque part que l'extension .php5 fait parti des fichiers à interprété mais je sais pas ou cela se déclare.

    autre élément, ton adresse est bien du type http://localhost/dossier/monfichier.php ?

  13. #13
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut
    J'ai installé la dernière version de EasyPHP, et ça fonctionne super.

    Merci bien.

    Bonne journée

  14. #14
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Citation Envoyé par selinav Voir le message
    Quand je test dans easyphp, j'obtiens le message d'erreur suivant :

    Fatal error: Call to undefined function: simplexml_load_file() in c:\program files\easyphp1-8\www\universdupainv2\essai\autoviewer\insertion.php on line 4

    Y'a-t-il une bibliothèque à installer?

    J'ai rajouté extension.php5
    Il faut activer l'extension simpleXml si ce n'est deja fais .

    Citation Envoyé par selinav
    Je crois avoir trouvé un truc bizarre, à aucun endroit on ne précise que l'on veut ajouter des infos dans le noeud <gallery>.

    $gallerie = $xml->Children();
    Gallerie est le premier noeud du fichier Xml donc en faisant ça on pointe directement dessus donc normalement pas besoin de preciser.
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  15. #15
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut
    j'ai réussi à faire afficher le fichier,il fallait mettre l'extension php5.

    Par contre le fichier me retourne le code source et ne modifie pas le fichier gallery.xml qui est dans le même répertoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $xml = simplexml_load_file('gallery.xml');
    $gallery = $xml->Children();
    $image = $gallery->addChild("image");
    $image->addChild('url', 'mon url');
    $image->addChild('caption', 'mon titre image');
    $image->addChild('width', '40');
    $image->addChild('height', '30');
    $xml->asXml('gallery.xml');
    ?>
    Par ailleurs comment puis-je afficher le fichier gallery.xml directement en dessous?

  16. #16
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    pour l'affichage :

    Attention , tu risque de ne pas voir ton Xml directement il faudra afficher la source de la page

    Pour la sauvegarde dans le fichier il y a peut etre un soucis , si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents  ($xml->asXML()  ,'galleri.xml');
    ça dis quoi ?
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  17. #17
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Par défaut
    j'obtiens toujours le code source et le fichier gallery.xml n'est pas modifié, et il n'apparaît pas non plus...



    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
     
    <?php
     
     
    $xml = simplexml_load_file('gallery.xml'); // chargement fichier gallery.xml
     
    $gallery = $xml->Children(); // prend le premier noeud du fichier
    $image = $gallery->addChild("image"); //ajoute noeud image
    $image->addChild('url', 'mon url'); //ajoute noeud dans image : ici url avec le texte "mon url" dedans
    $image->addChild('caption', 'mon titre image');
    $image->addChild('width', '40');
    $image->addChild('height', '30');
     
    //$xml->asXml('gallery.xml'); // sauvegarde modifications
    file_put_contents  ($xml->asXML()  ,'gallery.xml');
     
    echo $xml->asXML();
     
    ?>

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/01/2008, 21h48
  2. écrire dans un fichier xml
    Par isaglada dans le forum VBScript
    Réponses: 13
    Dernier message: 28/03/2007, 09h44
  3. [XML] [PHP-Flash] écrire dans un fichier XML via un fichier PHP
    Par morgiane dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 24/11/2006, 12h05
  4. [DOM XML] Comment écrire dans un fichier XML ?
    Par morgiane dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/11/2006, 11h32
  5. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48

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