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

Modules Perl Discussion :

Convertir fichier XML -> CSV


Sujet :

Modules Perl

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut Convertir fichier XML -> CSV
    J'ai un fichier XML :

    <NODE>

    <DATA>
    <HEADER DATE="2007/09/13 15:17:39" ID="1000" />
    <DATA1>
    <DATA2 DEST="DEST1" SOURCE="SOURCE1"></DATA2>
    </DATA1>
    </DATA>


    <DATA>
    <HEADER DATE="2007/09/13 15:18:39" ID="2000" />
    <DATA1>
    <DATA2 DEST="DEST2" SOURCE="SOURCE2"></DATA2>
    </DATA1>
    </DATA>


    <DATA>
    <HEADER DATE="2007/09/13 15:19:40" ID="3000" />
    </DATA>

    <DATA>
    <HEADER DATE="2007/09/13 15:19:42" ID="4000" />
    </DATA>

    <DATA>
    <HEADER DEST="DEST4" SOURCE="SOURCE4" />
    </DATA>

    <DATA>
    <HEADER DEST="DEST5" SOURCE="SOURCE5" />
    </DATA>

    </NODE>
    Je voudrais convertir ce fichier XML en CSV :

    2007/09/13 15:17:39 | 1000 | DEST1 | SOURCE1

    2007/09/13 15:18:39 | 2000 | DEST2 | SOURCE2

    2007/09/13 15:19:40 | 3000 | |

    2007/09/13 15:19:42 | 4000 | |

    | | DEST4 | SOURCE4

    | | DEST5 | SOURCE5
    est il possible de faire ça en perl ?

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par devdev2003 Voir le message
    est il possible de faire ça en perl ?
    Oui, par exemple avec XML::Twig.

    --
    Jedaï

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Oui, par exemple avec XML::Twig.

    --
    Jedaï
    Un exemple ?

    Merci

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par devdev2003 Voir le message
    Un exemple ?
    Une simple recherche sur Google te donnera un lien vers la page d'accueil de xmltwig, sur laquelle on trouve un tutorial. Un petit effort ?

    --
    Jedaï

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

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 61
    Points
    61
    Par défaut
    Maître Jedai fait bien de t'envoyer vers Twig qui est la façon propre de lire des XML.
    Tu devrais aussi utiliser un module pour écrire le CVS ce qui n'est pas si simple à faire proprement.

    Maintenant, si ton problème est juste de reformatter une log, Perl a été écrit pour ça initialement et pour ton fichier tu peux faire qque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $/="</DATA>";
     
    while(<>){
      my ($date) = (m/\bDATE="(.*?)"/);
      my ($id) = (m/\bID="(.*?)"/);
      my ($dest) = (m/\bDEST="(.*?)"/);
      my ($source) = (m/\bSOURCE="(.*?)"/);
      print join(" | ",($date,$id,$dest,$source)),"\n" if (m/<DATA>/);
    }
    Ca va bien marcher parce que tes noms de champs ne sont pas ambiguës, tu n'as à priori pas de problème d'encoding à gérer, etc.
    C'est moins générique que Twig mais ça s'écrit en 2 minutes!

Discussions similaires

  1. Convertir : fichier XML irregulier To Csv
    Par BertrandB dans le forum C#
    Réponses: 1
    Dernier message: 27/02/2015, 17h31
  2. Convertir un fichier xml en csv
    Par tegleyt dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 21/04/2011, 17h01
  3. [CSV] Traitement d'un très gros fichier XML ou CSV
    Par Paulux1 dans le forum Langage
    Réponses: 3
    Dernier message: 25/03/2008, 16h05
  4. sed et awk pour transformation d'un fichier XML en CSV
    Par bstages2000 dans le forum Linux
    Réponses: 4
    Dernier message: 02/03/2008, 17h19
  5. Comment importer un fichier xml ou csv dans une table paradox ?
    Par pierrot67 dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/09/2007, 15h35

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