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 :

Creation fichier XML


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Creation fichier XML
    Bonjour,

    Je dois créer un fichier xml sur le serveur.
    Ce fichier, issu d'une requête MySQL, va contenir un nombre important de lignes (de 15000 à 50000).

    Le temps de création du fichier est extrement long, plus d'une minute.

    J'ai testé deux méthodes mais avec des résultats assez semblables:
    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
     
     
    $dom = new DOMDocument('1.0', 'UTF-8');
    $rootNode= $dom->appendChild($dom->createElement('MyDB'));
     
    while($row_recordset = mysql_fetch_row($recordset))
     
    {
     
    	$record = new DomElement("p", "");
    	$rootNode->appendChild($record);
     
    	$record->SetAttribute("id", utf8_encode($row_recordset[0]));
    	$record->SetAttribute("np", utf8_encode($row_recordset[1]));
    	$record->SetAttribute("pr", utf8_encode($row_recordset[8]));
    	$record->SetAttribute("d1", utf8_encode($row_recordset[2])." / ".utf8_encode($row_recordset[3]));
    	$record->SetAttribute("dn", (datefr($row_recordset[4])));
    	$record->SetAttribute("tel", utf8_encode($row_recordset[5]));
     
    	$record->SetAttribute("st", utf8_encode($row_recordset[6])." - ".(datefr($row_recordset[7])));
     
     
    }
    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
     
    $writer = new XmlWriter();
     
    //lets also set the indent so its a very clean and formatted XML
    $writer->setIndent(true);
    $writer->openURI('php://output');
    $writer->startDocument('1.0', 'utf-8');
    $writer->startElement('MyDB');
    while($row_recordset = mysql_fetch_row($recordset))
     
    {
     
    	$writer->startElement('p');
    	$writer->writeAttribute("id", utf8_encode($row_recordset[0]));
    	$writer->writeAttribute("np", utf8_encode($row_recordset[1]));
    	$writer->writeAttribute("pr", utf8_encode($row_recordset[8]));
    	$writer->writeAttribute("d1", utf8_encode($row_recordset[2])." / ".utf8_encode($row_recordset[3]));
    	$writer->writeAttribute("dn", (datefr($row_recordset[4])));
    	$writer->writeAttribute("tel", utf8_encode($row_recordset[5]));
    	$writer->writeAttribute("st", utf8_encode($row_recordset[6])." - ".(datefr($row_recordset[7])));
     
    	$writer->endElement();
    }
    $writer->endElement();
    $writer->flush();

    L'un de vous aurait-il une autre idée permettant d'accélérer le traitement.

    Merci par avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 47
    Points
    47
    Par défaut
    Salut,

    as-tu essayé en écrivant à la main , type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while($row_recordset = mysql_fetch_row($recordset))
     
    {
     
    	$xml.='<p id="'.$row_recordset[0].'" np="'.$row_recordset[1].'" ... et caetera
     
    }
    ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    J'ai aussi testé mais cette méthode est encore plus longue.

    Merci de votre aide.

  4. #4
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Peut-être en configurant ta connexion à la base mysql en UTF-8. Ca éviterait de faire une conversion UTF-8 pour tous tes arguments.

    C'est pas évident d'identifier où est le goulot d'étranglement.

    Essaie de placer des checkpoints dans ton code où tu calculeras la date, ça permettra de savoir quelle partie du code est la plus consommatrice en temps.

    Si c'est le disque tu peux essayer d'utiliser un buffer via stream-set-write-buffer.

Discussions similaires

  1. creation fichier XML
    Par Bobble dans le forum VBA Access
    Réponses: 1
    Dernier message: 23/06/2009, 11h37
  2. Creation fichier XML
    Par lilissou dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/05/2009, 08h06
  3. creation fichier xml avec DOM
    Par swinia dans le forum Java ME
    Réponses: 0
    Dernier message: 20/02/2009, 10h16
  4. Creation fichier XML
    Par GTSLASH dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/09/2007, 19h04
  5. Creation fichier xml avec xmlDocument
    Par c+cool dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 19/05/2006, 22h34

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