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 :

[SimpleXML] XML - PHP - MySQL


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut [SimpleXML] XML - PHP - MySQL
    Bonjour,
    Je viens de passer quelques heures sur le forum à chercher une solution mais je n'ai malheureusement rien trouvé qui corresponde parfaitement.
    Je pense que c'est relativement simple : je souhaite modifier un fichier xml existant en ajoutant une balise et des attributs.
    Voici l'arborescence du fichier source
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="UTF-8"?>
    <LENEX version="3.0">
      <MEETS>
        <MEET>
          <SESSIONS>
            <SESSION>
              <EVENTS>
                <EVENT>
                </EVENT>
              </EVENTS>
            </SESSION>
          </SESSIONS>
        </MEET>
      </MEETS>
    </LENEX>
    Je voudrais ouvrir le fichier et ajouter ces balises :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <CLUBS>
            <CLUB>
              <ATHLETES>
                <ATHLETE>
                  <ENTRIES>
                    <ENTRY eventid="40" entrytime="00:00:57.50" />
                    <ENTRY eventid="60" entrytime="00:01:04.70" />
                  </ENTRIES>
                </ATHLETE>
              </ATHLETES>
            </CLUB>
    </CLUBS>
    juste après la balise </SESSIONS> sous la balise <MEET> en utilisant PHP et une source MYSQL pour alimenter les attributs des balises (eventid, entrytime) pour ensuite sauver le fichier sous un autre nom
    J'ai essayé avec fopen(), feof(), fgets(), mais je n'y suis pas arrivé. J'ai aussi essayé avec simplxml et addChild() et addAttribute() mais cela ne fonctionne pas bien, avez-vous une solution simple ?
    - ouvrir le fichier xml
    - ajouter les balises et les attributs au bon endroit
    - sauver le nouveau fichier

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté

    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
    Par défaut
    Normalement, c'est possible avec SimpleXML. A quel code êtes-vous arrivé ?

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut
    j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $xml = simplexml_load_file($file);
    	$meet = $xml->MEETS->MEET;
    		$meet->addChild('CLUBS');
        $meet->CLUBS->addAttribute('test', 'coucou');   
    echo $xml->asXML();
    mais il me crée une balise <CLUBS test="coucou"/> mais il ne me semble pas que ce soit correct, et je ne sais pas trop comment récupérer le fichier ensuite

  4. #4
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut
    je viens de tester :
    Code php : 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
    	$meet = $xml->MEETS->MEET;
    		$meet->addChild('CLUBS');
        $meet->CLUBS->addChild('CLUB');
    	    $meet->CLUBS->CLUB->addAttribute('name', nom);
    	    $meet->CLUBS->CLUB->addAttribute('code', 'test');
    	    $meet->CLUBS->CLUB->addAttribute('nation', 'BEL');
    	    			$meet->CLUBS->CLUB->addChild('ATHLETES');
    				$meet->CLUBS->CLUB->ATHLETES->addChild('ATHLETE');
    					$meet->CLUBS->CLUB->ATHLETES->ATHLETE->addAttribute('lastname', 'Dupont');
    					$meet->CLUBS->CLUB->ATHLETES->ATHLETE->addAttribute('firstname', 'Eric');
    					$meet->CLUBS->CLUB->ATHLETES->ATHLETE->addAttribute('gender', 'M');
              	$meet->CLUBS->CLUB->ATHLETES->ATHLETE->addChild('ENTRIES');
              	$meet->CLUBS->CLUB->ATHLETES->ATHLETE->ENTRIES->addChild('ENTRY');
              		$meet->CLUBS->CLUB->ATHLETES->ATHLETE->ENTRIES->ENTRY->addAttribute('eventid', '40');
              		$meet->CLUBS->CLUB->ATHLETES->ATHLETE->ENTRIES->ENTRY->addAttribute('entrytime', '00:00:57.50');
    echo $xml->asXML();
    ça à l'air de fonctionner, mais pour avoir le fichier je dois aller chercher la source, cela n'apparaît pas à l'écran, de plus les balises sont côte à côte et non pas l'une en dessous de l'autre :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <CLUBS><CLUB><ATHLETES><ATHLETE><ENTRIES><ENTRY eventid="40" entrytime="00:00:57.50"/></ENTRIES></ATHLETE></ATHLETES></CLUB></CLUBS></MEET>

  5. #5
    Membre expérimenté

    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
    Par défaut
    Citation Envoyé par j@yce Voir le message
    ça à l'air de fonctionner, mais pour avoir le fichier je dois aller chercher la source, cela n'apparaît pas à l'écran
    Je n'ai pas compris ce passage. Si le but est d'écrire dans un fichier, la méthode asXML possède un paramètre facultatif à cette fin.

    Citation Envoyé par j@yce Voir le message
    de plus les balises sont côte à côte et non pas l'une en dessous de l'autre
    Pour les options de formatage, que n'inclut pas simplexml, il faudrait se tourner vers dom si c'est réellement un problème.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut
    bonjour,
    je suis effectivement parvenu à modifié le fichier source, mais je préfèrerais en générer un nouveau, c'est possible ?
    Autre chose, j'ai voulu faire simple dans les explications, mais en réalité je dois faire appel à une base mysql pour rechercher les données, et donc il y aura forcément une boucle à intégrer, or, si je mets 2 fois l'attributs, j'ai évidemment une erreur "Attribute already exists ", comment faire ?

  7. #7
    Membre expérimenté

    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
    Par défaut
    Citation Envoyé par j@yce Voir le message
    je suis effectivement parvenu à modifié le fichier source, mais je préfèrerais en générer un nouveau, c'est possible ?
    Oui, comme précisé ci-dessus, la méthode asXML possède un paramètre facultatif permettant d'indiquer le nom du fichier où écrire le nouveau document XML au lieu le renvoyer sous la forme d'une chaîne.

    Citation Envoyé par j@yce Voir le message
    Autre chose, j'ai voulu faire simple dans les explications, mais en réalité je dois faire appel à une base mysql pour rechercher les données, et donc il y aura forcément une boucle à intégrer, or, si je mets 2 fois l'attributs, j'ai évidemment une erreur "Attribute already exists ", comment faire ?
    Pourquoi et comment trouverait-on un tel "doublon" alors ? (pour chaque résultat issu de la base, on crée un nouvel élément ENTRY avec ses propres attributs eventid et entrytime, non ? - clubs > club > athletes > athlete > entries étant créés avant l'itération).

  8. #8
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut doublon
    merci pour le fichier il crée effectivement un nouveau fichier à l'emplacement du dossier, j'aurais préféré pouvoir le sauvegarder à un emplacement précis... j'ai essayé avec
    header('Content-Disposition: attachement; filename="test.xml"');
    mais ça n'a pas fonctionné
    Pour ce qui est du doublon, en fait, mon résultat final doit être du type :
    Code xml : 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
    <CLUB>
              <ATHLETES>
                <ATHLETE birthdate="1966-01-01" firstname="Robert" gender="M" athleteid="6824">
                  <ENTRIES>
                    <ENTRY entrytime="00:00:33.50" eventid="1292"  />
                    <ENTRY entrytime="00:00:28.50" eventid="1300"  />
                    <ENTRY entrytime="00:01:05.00" eventid="1450"  />
                   </ENTRIES>
                </ATHLETE>
                <ATHLETE birthdate="1972-01-01" firstname="Anja" gender="F" athleteid="6887" />
                <ATHLETE birthdate="1959-01-01" firstname="Matthias" gender="M" athleteid="6888">
                  <ENTRIES>
                    <ENTRY entrytime="00:00:34.50" eventid="1378"  />
                    <ENTRY entrytime="00:00:31.00" eventid="1292"  />
                    <ENTRY entrytime="00:00:29.00" eventid="1300" />
                  </ENTRIES>
                </ATHLETE>
               </CLUBS>
    plusieurs athlete, et surtout plusieurs entry... si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $entry->addAttribute('eventid', '1082');
     $entry->addAttribute('entrytime', '00:00:57.50');
    $entry->addAttribute('eventid', '1084');
    $entry->addAttribute('entrytime', '00:01:57.50');
    j'ai forcément une erreur duplicate, et je ne vois pas trop comment la régler...

  9. #9
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut
    c'est bon, je pense avoir trouver... je dois juste créer un autre child...
    reste le prob1, quelqu'un a une idée pour récupérer le fichier et le sauvegarder sur son pc ?

  10. #10
    Membre expérimenté

    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
    Par défaut
    Ce n'est pas faute de l'avoir dit.

    Bref, définir "ça n'a pas fonctionné" au sujet de votre tentative d'en émettre le contenu au client ? C'est pourtant la démarche à adopter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    /* Traitement du XML */
    $xml = simplexml_load_file($file);
    // ...
     
    /* Emission au client */
    $outputname = 'test.xml';
    header('Content-Type: application/octetstream; name="' . $outputname . '"');
    header('Content-Disposition: attachment; filename="' . $outputname . '"');
    echo $xml->asXML();
    exit;
    (s'inspirer de la FAQ)

  11. #11
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut
    Citation Envoyé par julp Voir le message
    Ce n'est pas faute de l'avoir dit.

    Bref, définir "ça n'a pas fonctionné" au sujet de votre tentative d'en émettre le contenu au client ? C'est pourtant la démarche à adopter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    /* Traitement du XML */
    $xml = simplexml_load_file($file);
    // ...
     
    /* Emission au client */
    $outputname = 'test.xml';
    header('Content-Type: application/octetstream; name="' . $outputname . '"');
    header('Content-Disposition: attachment; filename="' . $outputname . '"');
    echo $xml->asXML();
    exit;
    (s'inspirer de la FAQ)
    ça ne fonctionne pas

  12. #12
    Membre expérimenté

    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
    Par défaut
    Citation Envoyé par j@yce Voir le message
    ça ne fonctionne pas
    On veut bien aider, et à défaut d'être extralucide, il faudrait faire un effort ! Des erreurs ? Il se passe quoi ? Pour quel code ?

  13. #13
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut
    et bien j'avais cité le code qui ne fonctionnait pas... j'ai fait un copié/colléde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    /* Traitement du XML */
    $xml = simplexml_load_file($file);
    // ...
     
    /* Emission au client */
    $outputname = 'test.xml';
    header('Content-Type: application/octetstream; name="' . $outputname . '"');
    header('Content-Disposition: attachment; filename="' . $outputname . '"');
    echo $xml->asXML();
    exit;
    modifié pour qu'il corresponde à mes fichiers, et rien. Pas de message d'erreur, le fichier se crée bien mais il n'y a pas de message pour me demander si je veux le sauver quelque part sur mon hdd

  14. #14
    Membre expérimenté

    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
    Par défaut
    Vous aviez bien corrigé attachement en attachment ? L'affichage des erreurs (toutes) est bien activé ? Pas de sortie avant l'envoi des entêtes ? Sont-ils bien émis (client textuel - par exemple telnet avec requête HEAD - ou tout outil spécialisé) ? Quels sont-ils ? Avez-vous essayé avec un autre navigateur, à tout hasard ?

  15. #15
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Par défaut
    bonjour,
    c'est bon, j'ai trouvé l'erreur, il y avait un header de trop, ça fonctionne maintenant, un grand merci pour votre aide

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

Discussions similaires

  1. [SimpleXML] XML => PHP simplexml_load_file
    Par limace2000 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/10/2012, 14h30
  2. besoin explication html-xml-php-mysql
    Par learningcode dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2011, 16h22
  3. [MySQL] XML -> PHP -> Mysql
    Par Marian83 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/07/2009, 15h41
  4. [[xml]->[php]->[MySQL]] script php pour lire du xml
    Par koudjo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 30/06/2006, 04h18
  5. [Wamp] Cherche plateforme pour développer en php, mysql, xml, xsl
    Par ibtisss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 10
    Dernier message: 18/10/2005, 18h31

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