#1 Le 29/11/2017, à 21:50
- ShellNoob
Script Shell: intégrer des balises dans un fichier XML
Bonjour,
J'aurais besoin d'aide car je cherches à modifier un fichier XML en y ajoutant du contenu entre les bonnes balises.
Je disposes d'un fichier es_systems.xml qui commence et termine avec les balises.
<?xml version="1.0"?>
<systemList>
</systemList>
Je cherches à intégrer le contenu d'un autre fichier "jeux_1.xml" dans "es_systems.xml", les nouveaux motifs doivent s'intégrer entre les balises systemList.
Mon fichier jeux_1.xml à la forme suivante:
<system>
<fullname></fullname>
<name></name>
<path></path>
<extension></extension>
<command> </command>
<platform></platform>
<theme></theme>
<emulators>
<emulator name="">
<cores>
<core></core>
</cores>
</emulator>
</emulators>
</system>
En utilisant AWK, j'arrives presque au résultat voulu en faisant comme ça:
awk -vfile=jeux.xml 'BEGIN{oldRS=RS;RS="^$";getline data<file;RS=oldRS}/<systemList>/{$0=$0"\n"data}{print}' es_systems.xml >> es_systems_modifie.xml
es_systems.xml -> lu mais non modifié
es_systems_modifie.xml -> le même avec le contenu du fichier jeux.xml importé de dans
Problème si je relance une deuxième fois la commande mais en remplaçant jeux_1.xml par jeux_2.xml pour insérer un autre ensemble de balise, cela duplique les balises <systemList></systemList> du fait de le redirection dans le fichier. Il y aurai un moye d'éviter la redirection pour modifier le fichier original et éviter de dédoubler les balsies de début et de fin?
PS: pas de possibilité d'utiliser xmlstarlet sur la distrib
Hors ligne
#2 Le 30/11/2017, à 08:59
- pingouinux
Re : Script Shell: intégrer des balises dans un fichier XML
Bonjour,
Tu peux créer un fichier intermédiaire avec la première commande, qui te servira d'entrée pour la seconde, mais les insertions seront inversées.
awk -vfile=jeux_1.xml 'BEGIN{oldRS=RS;RS="^$";getline data<file;RS=oldRS}/<systemList>/{$0=$0"\n"data}{print}' es_systems.xml >fichier_intermediaire
awk -vfile=jeux_2.xml 'BEGIN{oldRS=RS;RS="^$";getline data<file;RS=oldRS}/<systemList>/{$0=$0"\n"data}{print}' fichier_intermediaire > es_systems_modifie.xml
Hors ligne
#3 Le 30/11/2017, à 17:22
- ShellNoob
Re : Script Shell: intégrer des balises dans un fichier XML
Merci pingouinux
J'ai trouvé une autre solution ultra simple
Pour inserer aprés la balise <systemList> en début de fichier
sed '/<systemList>/r jeux.xml' es_systems.xml
Ou le contraire en fin de fichier avant la balise systemList qui ferme
sed ':A;$bB;N;:B;/<\/systemList>/!b;h;s/.*/cat jeux.xml/e;G' es_systems.xml
Je rajoutes juste un redirection à la fin pour écrire mon fichier de conf
sed '/<systemList>/r jeux.xml' es_systems.xml > temp.xml && mv temp.xml es_systems.xml
Dernière modification par ShellNoob (Le 30/11/2017, à 17:22)
Hors ligne
#4 Le 30/11/2017, à 18:04
- Compte anonymisé
Re : Script Shell: intégrer des balises dans un fichier XML
Bonjour,
au cas où
sed '/<systemList>/r jeux.xml' es_systems.xml > temp.xml && mv temp.xml es_systems.xml
=
sed -i '/<systemList>/r jeux.xml' es_systems.xml
Dernière modification par Compte anonymisé (Le 30/11/2017, à 18:04)
#5 Le 30/11/2017, à 22:01
- ShellNoob
Re : Script Shell: intégrer des balises dans un fichier XML
Merci Anonyme68!
A la base, je n'avais pas mis par -i car je pensais que Busybox ne l'interprêtait pas mais en fait si ^^
Hors ligne