Bonjour,

Je dispose d'un fichier XML sous cette forme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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