Traiter XML avec Shell

Résolu/Fermé
jhoncoke Messages postés 35 Date d'inscription jeudi 30 septembre 2010 Statut Membre Dernière intervention 4 octobre 2012 - 4 janv. 2011 à 11:12
jhoncoke Messages postés 35 Date d'inscription jeudi 30 septembre 2010 Statut Membre Dernière intervention 4 octobre 2012 - 5 janv. 2011 à 13:45
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
4 janv. 2011 à 11:15
Salut,

Merci de poster un exemple concret de ce que tu veux obtenir...
0
jhoncoke Messages postés 35 Date d'inscription jeudi 30 septembre 2010 Statut Membre Dernière intervention 4 octobre 2012
4 janv. 2011 à 15:27
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
4 janv. 2011 à 15:49
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 jeudi 30 septembre 2010 Statut Membre Dernière intervention 4 octobre 2012
4 janv. 2011 à 16:04
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
5 janv. 2011 à 11:04
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 jeudi 30 septembre 2010 Statut Membre Dernière intervention 4 octobre 2012
5 janv. 2011 à 13:45
Ca marche... Merci :)
0