Traiter XML avec Shell

Résolu
jhoncoke Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -  
jhoncoke Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un gros fichier XML, voici un bout du fichier:
<infrastructure id="IS" version="2.0">
<tracks>
<track id="TR1.1" mainDir="up">
<trackTopology>
<trackBegin id="TRB1.1" pos="0" absPos="140800">
<macroscopicNode ocpRef="PTCAR1116"/>
</trackBegin>
<trackEnd id="TRE1.1" pos="135000" absPos="275800">
<macroscopicNode ocpRef="PTCAR88"/>
</trackEnd>
</trackTopology>
<trackElements>
<speedChanges>
<speedChange id="S1.1" pos="0" absPos="140800" dir="up" vMax="120"/>
</speedChanges>
<gradientChanges/>
<radiusChanges/>
<levelCrossings/>
<electrificationChanges>
<electrificationChange id="E1.1" pos="0" absPos="140800" dir="up" type="overhead" voltage="1500"/>
</electrificationChanges>
</trackElements>
</track>

Et j'aimerais traiter ce fichier pour classer les données par colonnes dans un fichier txt... Comment je pourrais faire cela avec un script sous Ubuntu ou alors des programmes tout fait??

Merci:)
Et bonne année:)


A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Merci de poster un exemple concret de ce que tu veux obtenir...
0
jhoncoke Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
je recentre ma question, voici un bout exemple:
<track id="TR1.1" mainDir="up">
...
</track>
<track id="TR1.2" mainDir="down">
...
</track>
...

Je voudrais mettre chaque nouvelle balise track dans un nouveau fichier xml différent pour avoir à la fin TR1.1.xml; TR1.2.xml; etc.

Merci
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
C'est tout ? Juste parser la ligne contenant "track id=" ?
Rien d'autre à récupérer ?
0
jhoncoke Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
C'est juste mettre tout ce qu'il y a entre <track id=...> ... </track> dans un fichier xml différent (début et fin de balise inclus)
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Re-

Un truc du genre devrait faire l'affaire. A adapter tout de même surtout au niveau du séparateur d'enregistrement en entrée (RS) et du champ de récupération pour le nom du fichier (A=$n) :

awk '
BEGIN {
FS="\""
RS="<infrastructure id=\"IS\" version=\"2.0\">"
}
{
if (/track id/)
{
A=$2
print $0 > A".xml"
}
}
' fichier.xml

À défaut d'exemple concret et plus précis de ta part, j'ai supputé que la ligne <infrastructure id="IS" version="2.0"> était répétée et je m'en suis servi comme séparateur. Si tel n'était pas le cas à remplacer par 'RS="</track>"' et 'A=$6'
0
jhoncoke Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
Ca marche... Merci :)
0