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 :

Génération plusieurs fichiers XML


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut Génération plusieurs fichiers XML
    Bonjour,

    Je travaille actuellement sur un script PHP qui permet de convertir les données d'une base de donnée en PHP (elle même généré par un formulaire en PHP).

    Mon problème est de pouvoir constituer un fichier pour chaque entrée et non de générer ce fichier a la suite du même. En clair, pour chaque entrée de ma base de donnée j'aurais un nouveau XML généré. Je précise que son nom dépendra du nom du fichier source qui est stocké dans la variable $NomFichierSource.

    Mon problème est donc de générer un fichier pour une entrée . Le script qui suit ne génére qu'un seul fichier.

    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
    40
    41
    42
    43
    44
    <?php
     
     $xml = '<?xml version="1.0" encoding="UTF-8"?>';
     /*$xml .= '<?xml-stylesheet type="text/xsl" href="first.xsl" ?>';*/
     $xml .='<TEI xmlns="http://www.tei-c.org/ns/1.0">';
     $xml .= '<teiHeader>'; 
     
     
     require ('connection.php'); 
      // Faîtes appel à vos fichier de connection à votre base de donnée MySQL
      // Adaptez ces lignes à votre base de données / noms de table
      $resultat_requete=mysql_query("SELECT * FROM header_tei");
      // extraction des 10 dernières nouvelles
      while($lig=mysql_fetch_assoc($resultat_requete)){ 
        $Responsable=$lig["Responsable"];
        $NomFichierSource=$lig["NomFichierSource"];
    	$DescriptionFichierSource=$lig["DescriptionFichierSource"];
    	$Distributeur=$lig["Distributeur"];
    	$Duree=$lig["Duree"];
    	$Locuteur1=$lig["Locuteur1"];
    	$Locuteur2=$lig["Locuteur2"];
    	$RaisonRetranscription=$lig["RaisonRetranscription"];
    	$CommentRetranscription=$lig["CommentRetranscription"];
    	$DescriptionRetranscription=$lig["DescriptionRetranscription"];
     
     
        $xml .= '<fileDesc><titleStmt><title/><author>'.$Responsable.'</author></titleStmt><publicationStmt><distributor>'.$Distributeur.'</distributor></publicationStmt><sourceDesc><recordingStmt><p>'.$DescriptionFichierSource.$Duree.'</p></recordingStmt></sourceDesc></fileDesc><encodingDesc><projectDesc><p>'.$RaisonRetranscription.'</p></projectDesc><editorialDecl><normalization><p>'.$CommentRetranscription.'</p></normalization></editorialDecl></encodingDesc><profileDesc><particDesc><listPerson><person xml:id="spk1" sex="0"><p><name>'.$Locuteur1.'</name></p></person><person xml:id="spk2" sex="0"><p><name>'.$Locuteur2.'</name></p></person></listPerson></particDesc><settingDesc><p>'.$DescriptionRetranscription.'</p></settingDesc></profileDesc>';
     
      }//fin du while
     
      $xml .= '</teiHeader>';
     
      $xml .= '<text><body><p></p></body></text>';
     
      $xml .= '</TEI>';
     
     
      $fp = fopen("Header.xml", 'w+');
      fputs($fp, $xml);
      fclose($fp);
     
      echo '<h3>Export XML du dictionnaire effectue !<br /><a href="Header.xml"></h3><br><h3>Voir 
      le fichier</a></h3>';
      ?>
    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $fp = fopen("Header.xml", 'w+');
      fputs($fp, $xml);
    Ce code ouvre le fichier Header.xml, et y ajoute la chaîne $xml.

    Si tu veux un fichier par ligne de requête, tu dois faire ceci dans ta boucle while, et créer un nouveau fichier à chaque fois, au lieu d'ouvrir Header.xml.

    Si j'ai bien compris ce que tu veux faire, bien sûr...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    Merci.

    Voila une partie du code (la boucle while) :
    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
    while($lig=mysql_fetch_assoc($resultat_requete)){
    	$Responsable=$lig["Responsable"];
    	$NomFichierSource=$lig["NomFichierSource"];
    	$DescriptionFichierSource=$lig["DescriptionFichierSource"];
    	$Distributeur=$lig["Distributeur"];
    	$Duree=$lig["Duree"];
    	$Locuteur1=$lig["Locuteur1"];
    	$Locuteur2=$lig["Locuteur2"];
    	$RaisonRetranscription=$lig["RaisonRetranscription"];
    	$CommentRetranscription=$lig["CommentRetranscription"];
    	$DescriptionRetranscription=$lig["DescriptionRetranscription"];
     
    	$xml = '<?xml version="1.0" encoding="UTF-8"?>';
    	/*$xml .= '<?xml-stylesheet type="text/xsl" href="first.xsl" ?>';*/
    	$xml .='<TEI xmlns="http://www.tei-c.org/ns/1.0">';
    	$xml .= '<teiHeader>';
     
    	$xml .= '<fileDesc><titleStmt><title/><author>'.$Responsable.'</author></titleStmt><publicationStmt><distributor>'.$Distributeur.'</distributor></publicationStmt><sourceDesc><recordingStmt><p>'.$DescriptionFichierSource.$Duree.'</p></recordingStmt></sourceDesc></fileDesc><encodingDesc><projectDesc><p>'.$RaisonRetranscription.'</p></projectDesc><editorialDecl><normalization><p>'.$CommentRetranscription.'</p></normalization></editorialDecl></encodingDesc><profileDesc><particDesc><listPerson><person xml:id="spk1" sex="0"><p><name>'.$Locuteur1.'</name></p></person><person xml:id="spk2" sex="0"><p><name>'.$Locuteur2.'</name></p></person></listPerson></particDesc><settingDesc><p>'.$DescriptionRetranscription.'</p></settingDesc></profileDesc>';
    	$xml .= '</teiHeader>';
     
    	$xml .= '<text><body><p></p></body></text>';
     
    	$xml .= '</TEI>';
     
    	$XmlOut = $NomFichierSource;
    	$fp = fopen($XmlOut, 'w+');
    	fputs($fp, $xml);
    	fclose($fp);
     
     
    }//fin du while
    Ce code permet de generer un fichier a chaque entrée et de le nommer a l'aide de la variable $NomFichierSource.

    J'ai une autre question. Apres mon while, je souhaiterai afficher la liste des fichier généré.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Par défaut
    Citation Envoyé par knebhi Voir le message

    J'ai une autre question. Apres mon while, je souhaiterai afficher la liste des fichier généré.
    Dans ce cas, tu créés une variable tableau vide avant le while.
    Ensuite dans la boucle, tu ajoutes le nom du fichier créé au tableau à chaque fois.
    Puis après la boucle, tu affiches ton tableau.

    Ou tu peux aussi faire des print du nom de fichier dans la boucle, mais je trouve ça moins bien car le jour où tu dois débuguer ça pollue un peu la lecture.

    Et si tu veux faire des tests sur les noms de fichiers, choisir d'afficher ou non etc..., c'est plus propre de le faire en dehors du code qui génère les fichiers eux-mêmes.

    Enfin, c'est mon avis, chacun ses préférences.

    Voici ce quej e ferais donc:

    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
     
    $tabFic = array();
    while($lig=mysql_fetch_assoc($resultat_requete)){
    //Code de la boucle
     
    array_push( $tabFic, $NomFichierSource );
     
    //Suite du code de la boucle
    	$XmlOut = $NomFichierSource;
    	$fp = fopen($XmlOut, 'w+');
    	fputs($fp, $xml);
    	fclose($fp);
     
     
    }//fin du while
     
    //Nouvelle boucle pour affichage
    foreach( $tabFic as $fic ) {
        //Code pour afficher les noms
     
    }//Fin de la boucle d'affichage

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    ça fonctionne bien pour le moment j'ai effectué un peu la même manipulation que toi.
    J'ai mes fichiers lister et j'ai mes liens vers eux.

    J'ai une autre problématique sur ce code . Pour le moment tout fonctionne bien.

    Mais il est possible que j'ai une grande masse de fichiers généré par la suite.

    Or il se trouve qu'à chaque nouvelle entrée sur la bdd il génére l'entrée nouvelle mais également les anciennes.
    De ce fait, ça va créer du mouvement pour rien à chaque éxécution du script.

    Donc, comment faire pour ne générer le fichier qu'avec la nouvelle entrée?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Par défaut
    En restreignant le nombre d'entrées à traiter, donc en fournissant une requête SQL différente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM header_tei WHERE toto=uneValeur

Discussions similaires

  1. import de plusieurs fichiers XML dans Access 2003
    Par frdek dans le forum Access
    Réponses: 7
    Dernier message: 09/08/2008, 19h39
  2. Réponses: 3
    Dernier message: 16/02/2006, 18h38
  3. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 00h32
  4. Uilisation de plusieurs fichiers xml à la fois
    Par elacsap78 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 10/01/2006, 16h00
  5. [DOM] Génération dynamique fichier xml
    Par Fabouney dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 03/10/2005, 09h45

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