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

Shell et commandes GNU Discussion :

Reformatage de fichier xml


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut Reformatage de fichier xml
    Bonjour,

    Je reçois un fichier xml qui contient :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <HEADER>
          <CODE_PAYS>
    FR
          </CODE_PAYS>
          <CODE_MARQUE>YR</CODE_MARQUE>
          <CODE_MAGASIN>
    0729
          </CODE_MAGASIN>
          <TAUX_TVA>
    20
          </TAUX_TVA>
    </HEADER>
    avec des fins de ligne a chaque fois (code hexa 0D)

    Je dois le transformer (via script) en

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <HEADER>
          <CODE_PAYS>FR</CODE_PAYS>
          <CODE_MARQUE>YR</CODE_MARQUE>
          <CODE_MAGASIN>0729</CODE_MAGASIN>
          <TAUX_TVA>20</TAUX_TVA>
    </HEADER>

    Je sèche pour faire cela, auriez vous une idée, une piste ...... :-)
    Merci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Après avoir converti ton fichier au format Unix avec dos2unix, ceci devrait faire l'affaire (sous réserve que toutes les conditions aient été données dans ton exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat fich 
    <HEADER>
    <CODE_PAYS>
    FR
    </CODE_PAYS>
    <CODE_MARQUE>YR</CODE_MARQUE>
    <CODE_MAGASIN>
    0729
    </CODE_MAGASIN>
    <TAUX_TVA>
    20
    </TAUX_TVA>
    </HEADER>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ sed '/HEADER/b;:z;\#</#!{N;bz};s#\n##g' fich 
    <HEADER>
    <CODE_PAYS>FR</CODE_PAYS>
    <CODE_MARQUE>YR</CODE_MARQUE>
    <CODE_MAGASIN>0729</CODE_MAGASIN>
    <TAUX_TVA>20</TAUX_TVA>
    </HEADER>

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut
    Super , un grand merci , c'est presque parfait . Il me rassemble la première balise. Je vais bidouiller.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <HEADER> <CODE_PAYS>FR</CODE_PAYS>
    <CODE_MARQUE>YR</CODE_MARQUE>
    <CODE_MAGASIN>0729</CODE_MAGASIN>
    <TAUX_TVA>20</TAUX_TVA>
    </HEADER>

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par frabey Voir le message
    Super , un grand merci , c'est presque parfait . Il me rassemble la première balise. Je vais bidouiller.
    Pourtant le code que je t'ai donné est censé ne pas tenir compte de cette balise

    Tu dois avoir un caractère parasite sur cette ligne

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    je n'en comprends pas l'interet
    le xml est fait pour précisément être structuré je te conseille même de forcer encore plus la structure telle que :
    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
     
    francois@h2g2:~/Documents$ cd                            
    francois@h2g2:~$ mkdir test                                      
    francois@h2g2:~$ cd !$                                            
    cd test                                                        
    francois@h2g2:~/test$ cat > toto                        
    <HEADER>                                                          
    <CODE_PAYS>                                             
    FR                                                                          
    </CODE_PAYS>                                                             
    <CODE_MARQUE>YR</CODE_MARQUE>                                                                               
    <CODE_MAGASIN>                                                            
    0729                                                                                                        
    </CODE_MAGASIN>                                          
    <TAUX_TVA>                                                         
    20                                                            
    </TAUX_TVA>                                                     
    </HEADER>                                                 
     
    francois@h2g2:~/test$ xmllint --format toto                                                                         
    <?xml version="1.0"?>
    <HEADER>
      <CODE_PAYS>
        FR
      </CODE_PAYS>
      <CODE_MARQUE>YR</CODE_MARQUE>
      <CODE_MAGASIN>
        0729 
      </CODE_MAGASIN>
      <TAUX_TVA>
        20
      </TAUX_TVA>
    </HEADER>
    francois@h2g2:~/test$ cd ..
    francois@h2g2:~$ rm -rf test
    sinon une solution de brute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    francois@h2g2:~$ sed ':a;N;$!ba;s/\n//g;s/<\/[^>]*>/&\n/g;s/ER>/ER>\n/' test
    <HEADER>
    <CODE_PAYS>FR</CODE_PAYS>
    <CODE_MARQUE>YR</CODE_MARQUE>
    <CODE_MAGASIN>0729</CODE_MAGASIN>
    <TAUX_TVA>20</TAUX_TVA>
    </HEADER>
     
    francois@h2g2:~$ rm test
    francois@h2g2:~$
    le premier sed met tout sur une ligne, le second mets un \n à la fin de tout bloc <\....> et le dernier ajoute le \n qui manque au <header> parce lui ne rentre pas dans la selection donc il faut le forcer...

Discussions similaires

  1. Recuperation du fichier xml
    Par Geulderack dans le forum XMLRAD
    Réponses: 10
    Dernier message: 28/02/2003, 11h06
  2. Insertion dans un fichier XML
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/02/2003, 17h16
  3. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 15h22
  4. [Kylix] Composant IBM pour fichiers XML
    Par Mister Nono dans le forum EDI
    Réponses: 1
    Dernier message: 29/09/2002, 20h28
  5. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29

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