remplissage de plusieurs fichiers XML depuis un fichier XLS

remplissage de plusieurs fichiers XML depuis un fichier XLS - XML/XSL - Programmation

Marsh Posté le 07-12-2009 à 12:38:39    

Bonjour,
 
Je vous sollicite une nouvelle fois parce que j'ai une tache récurrente à faire  et j'ai mis 2 heures pour faire 20 fois cette tache.
Je cherche donc une solution scriptée.
Voilà:
J'ai approximativement 340 fichiers XML  à créer et  à alimenter avec des données contenues dans un fichier excel.
 
Mon  fichier excel comporte 4 colonnes qui sont  respectivement :
 
le Computer Name, le LogonName, le FullName, et une chaine de caractère qui est logonName_RDP.
 
 
Mon fichier XML (copié ci dessous) doit être rempli comme suit:
 
<configuration xmlns="http://xml.juniper.net/ive-sa/6.3R6.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<users>
 <user-roles>
  <user-role>
   <name>FullNAME</name>  
            <general>
                <overview>
     <options>
                        <vlan-source-ip>false</vlan-source-ip>
                        <session-options>false</session-options>
                        <ui-options>false</ui-options>
                    </options>
     <access-features>
                        <web>false</web>
                        <windows-files>false</windows-files>
                        <nfs-files>false</nfs-files>
                        <sam>false</sam>
                        <telnet-ssh>false</telnet-ssh>
                        <terminal-services>true</terminal-services>
                        <meeting>false</meeting>
                        <email>false</email>
                        <network-connect>false</network-connect>
                    </access-features>
    </overview>
   </general>
   <terminal-services>
    <sessions>
     <session>
      <name>FullNAME_RDP</name>  
      <description />  
      <parent>--none--</parent>  
      <auto-launch>true</auto-launch>  
      <wts>
       <username>&lt;USER&gt;</username>  
       <password-type>variable</password-type>  
       <variable-password>&lt;PASSWORD&gt;</variable-password>  
       <host>COMPUTER NAME</host>  
       <client-port>0</client-port>  
       <server-port>3389</server-port>  
       <screen-size>fullscreen</screen-size>  
       <color-depth>16-bit</color-depth>  
       <launch-seamless>false</launch-seamless>  
       <alias-name />  
       <application-path />  
       <path-dir />  
       <connect-drives>false</connect-drives>  
       <connect-printers>false</connect-printers>  
       <connect-comports>false</connect-comports>  
       <allow-clipboard>false</allow-clipboard>  
       <experience-options>
        <desktop-background>false</desktop-background>  
        <menu-window-animation>false</menu-window-animation>  
        <bitmap-caching>false</bitmap-caching>  
        <desktop-composition>false</desktop-composition>  
        <show-content-dragging>false</show-content-dragging>  
        <themes>false</themes>  
        <font-smoothing>false</font-smoothing>  
       </experience-options>
       <connect-smartcards>false</connect-smartcards>  
       <sound-options>disable</sound-options>  
      </wts>
     </session>
    </sessions>
   </terminal-services>
  </user-role>
 </user-roles>
 <user-realms>
  <realm>
   <name>basic</name>
   <role-mapping-rules>
                <rule>
                    <name>logonName</name>
                    <user-name>
                        <test>is</test>
                        <user-names>logonName</user-names>
                    </user-name>
                    <roles>FullNAME</roles>
                    <stop-rules-processing>false</stop-rules-processing>
                </rule>
   </role-mapping-rules>
  </realm>
 </user-realms>
</users>  
</configuration>
 
Pouvez vous m'aider ? Avez vous la solution miracle?
 
Merci  de votre aide
 
Lyes
 

Reply

Marsh Posté le 07-12-2009 à 12:38:39   

Reply

Marsh Posté le 07-12-2009 à 12:40:58    

Merci d'éviter de créer 36 topics pour le même sujet.

Reply

Marsh Posté le 07-12-2009 à 13:22:27    

Modération a écrit :

Merci d'éviter de créer 36 topics pour le même sujet.


 
Désolé,
 
Je ne savais pas trop  dans  quelle  catégorie le mettre j'hésitais entre les 3.
 
C'est promis je  recommencerai plus
 
Lyes

Reply

Marsh Posté le 07-12-2009 à 13:23:58    

sed et awk sont tes amis. tu enregistres ton fichier input en csv, puis tu fais qqchose comme

Code :
  1. awk -F\; '{print "sed -e \"s/Computer Name/$1/\" -e \"s/LogonName/$2/\" -e \"s/FullName/$3/\" -e \"s/logonName_RDP/$4/\" input.csv > $1_$2_$3_$4.xml"}' > traitement.sh
  2.  
  3. . ./traitement.sh
 

Message cité 1 fois
Message édité par pataluc le 07-12-2009 à 13:24:13
Reply

Marsh Posté le 08-12-2009 à 11:05:28    

pataluc a écrit :

sed et awk sont tes amis. tu enregistres ton fichier input en csv, puis tu fais qqchose comme

Code :
  1. awk -F\; '{print "sed -e \"s/Computer Name/$1/\" -e \"s/LogonName/$2/\" -e \"s/FullName/$3/\" -e \"s/logonName_RDP/$4/\" input.csv > $1_$2_$3_$4.xml"}' > traitement.sh
  2.  
  3. . ./traitement.sh


 


 
Bonjour Pataluc,
 
Ta solution m'intéresse, cependant comment est-ce que je fait pour récupérer la structure de mon xml d'origine?
Parce qu'en  fait les xml généré sont destinés à être injecté dans une passerelle juniper.
Y'a t-il possibilité d'indiquer un autre fichier xml "modèle" en entrée afin qu'il reprenne (en sortie) la même strucure que le fichier xml modèle?
Je sais pas si c'est  très clair se que je dis mais j'ignore comment m'expliquer autrement.
 
Merci de ton aide et  de votre aide à tous
 
Lyes

Reply

Marsh Posté le 08-12-2009 à 11:16:49    

dsl j'ai rien compris.
 
ah je crois que j'ai compris, il y a une erreur dans ce que j'ai mis plus haut, ca ca devrait être mieux:

Code :
  1. awk -F\; '{print "sed -e \"s/Computer Name/$1/\" -e \"s/LogonName/$2/\" -e \"s/FullName/$3/\" -e \"s/logonName_RDP/$4/\" template.xml > $1_$2_$3_$4.xml"}' input.csv > traitement.sh

Message cité 1 fois
Message édité par pataluc le 08-12-2009 à 11:18:35
Reply

Marsh Posté le 08-12-2009 à 13:16:30    

pataluc a écrit :

dsl j'ai rien compris.
 
ah je crois que j'ai compris, il y a une erreur dans ce que j'ai mis plus haut, ca ca devrait être mieux:

Code :
  1. awk -F\; '{print "sed -e \"s/Computer Name/$1/\" -e \"s/LogonName/$2/\" -e \"s/FullName/$3/\" -e \"s/logonName_RDP/$4/\" template.xml > $1_$2_$3_$4.xml"}' input.csv > traitement.sh



 
Merci de ta réponse et de ta rapidité.
 
Néanmoins il  reste une petite chose obscure pour mes neuronnes.
 
Si j'ai bien  compris dans les balises de mon  template XML il faut que je mette le nom des champs (computer Nam, Logon...) à remplacer par mes variables ($1 $2 $3 ...)?
 
Faut-il que les séparateurs de mon csv soient des "\" ?
 
Et le awk  va me générer le script traitement.sh qui  va faire le boutlot?
 
Si  c'est  ça  ta solution  est  géniale !!!
 
 
Merci pour ton aide.
 
Lyes

Message cité 1 fois
Message édité par anticafards le 08-12-2009 à 13:41:33
Reply

Marsh Posté le 08-12-2009 à 14:17:35    

anticafards a écrit :

Si j'ai bien  compris dans les balises de mon  template XML il faut que je mette le nom des champs (computer Nam, Logon...) à remplacer par mes variables ($1 $2 $3 ...)?


 
Exactement. dans ce que j'ai mis, le sed va chercher dans le template "Computer Name", ou "LogonName" et le remplacer par $1 ou $2.
 

anticafards a écrit :

Faut-il que les séparateurs de mon csv soient des "\" ?


en l'occurrence il faut que ce soit des points virgules. mais tu peux le changer en modifiant le paramètre -F du awk.
 

anticafards a écrit :

Et le awk  va me générer le script traitement.sh qui  va faire le boutlot?

normalement, oui.

Reply

Marsh Posté le 08-12-2009 à 14:55:05    

pataluc a écrit :


 
Exactement. dans ce que j'ai mis, le sed va chercher dans le template "Computer Name", ou "LogonName" et le remplacer par $1 ou $2.
 


 

pataluc a écrit :


en l'occurrence il faut que ce soit des points virgules. mais tu peux le changer en modifiant le paramètre -F du awk.
 


 

pataluc a écrit :

normalement, oui.


 
Bon je viens  d'essayer mais chez moi ça marche pas.
 
J'utilise Windows et les GNU/UnxUtils for windows.
 
J'ai tappé la commande suivante dans une console cmd sous windows XP depuis le répertoire où se trouve mes 2 fichiers le input.csv et  le template.xml:
 
gawk -F\; '{print "sed -e \"s/FullName/$1/\" -e \"s/Login_RDP/$2/\" -e \"s/computer/$3/\" -e \"s/logon/$4/\" -e \"s/logon2/$5/\"  template.xml > $2_.xml"}' input.csv > traitement.cmd  
 
 
et voici ce que ça me renvoit:
 
D:\debug>gawk -F\; '{print "sed -e \"s/FullName/$1/\" -e \"s/Login_RDP/$2/\" -e
\"s/computer/$3/\" -e \"s/logon/$4/\" -e \"s/logon2/$5/\"  template.xml > $2_.xm
l"}' input.csv  1>traitement.cmd
gawk: warning: escape sequence `\;' treated as plain `;'
gawk: cmd. line:1: '{print
gawk: cmd. line:1: ^ invalid char ''' in expression
 
 
Je sais pas si j'ai mal compris qqchose?
 
Encore merci pour ton aide
Lyes
 

n°1948477
pataluc
Posté le 08-12-2009 à 16:37:02  profilanswer
 

avec le gawk d'unxutils, tu ne peux pas utiliser les quotes simple, il faut mettre des doubles. du coup n'oublie pas d'échapper avec \" celle qui sont à l'intérieur, et d'échapper double celle qui l'étaient déja (avec \\\" ).

 

attention ensuite le > n'a pas l'air de passer, je te suggère de le remplacer par "___" et de le remplacer ensuite par > dans notepad ou autre.

 

ca devrait donner qqchose du genre:

Code :
  1. gawk -F ";" "{print \"sed -e \\\"s/FullName/$1/\\\"  ... template.xml __ $2_.xml\"}" input.csv
Reply

Marsh Posté le 08-12-2009 à 16:37:02   

Reply

Marsh Posté le 08-12-2009 à 18:40:33    

pataluc a écrit :

avec le gawk d'unxutils, tu ne peux pas utiliser les quotes simple, il faut mettre des doubles. du coup n'oublie pas d'échapper avec \" celle qui sont à l'intérieur, et d'échapper double celle qui l'étaient déja (avec \\\" ).
 
attention ensuite le > n'a pas l'air de passer, je te suggère de le remplacer par "___" et de le remplacer ensuite par > dans notepad ou autre.
 
ca devrait donner qqchose du genre:

Code :
  1. gawk -F ";" "{print \"sed -e \\\"s/FullName/$1/\\\"  ... template.xml __ $2_.xml\"}" input.csv

(j'ai corrigé aussi le -F, il faut mettre -F ";" et pas -F\; )


 
 
Merci, shokran, sahit, thank you so much, gracias  ! it works...
 
ça marche nickel !
 
 
Lyes

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed

© 2018 Forum. All Rights Reserved.