[SHELL] Convertir un XML en CSV
Bonjour,
Je dispose d'un fichier XML sous cette forme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| <xml>
<element>
<nom>DUPOND</nom
<prenom>Paul</prenom>
....
</element>
<element>
<nom>DURAND</nom
<prenom>Pierre</prenom>
....
</element>
</xml> |
Je cherche à extraire les données de ce xml et de les mettre au format CSV dans un unique fichier de ce type :
Code:
1 2 3
| nom;prenom;....
DUPOND;Paul;...
DURAND;Pierre... |
La contrainte est que l'ordre ainsi que le nombre de balises XML peut varier ( on peut ajouter par exemple la balise adresse, et inverser nom / prenom), donc avoir un système souple et dynamique.
(Le fichier XML est un fichier dépassant les 100Mo)
Ce que j'ai commencé à faire :
Suppression des balises xml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
awk "/<xml>/,/<\/xml>/" fichier.xml | grep -v "xml>" > fichier.log
while read line;do
# Nouvelle ligne
if [ "$line" == "<element>" ]
then
echo -e '\n'
else
echo $line | cut -d "[" -f 3 | cut -d "]" -f 1 => Recuperation de la valeur de la balise
fi
done
done < fichier.log |
Je suis pas vraiment avancé, il me manque à savoir de quelle balise il s'agit, et ordonner à la rigueur les valeurs pour créer la ligne csv.
Mais vraiment pas terrible comme algo.
Merci de votre aide