Traitement d'un fichier xml avec awk/grep/sed - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 08-08-2007 à 20:14:40
Tu peux pas utiliser un peu de xslt ?
genre toto.xml :
<?xml version="1.0" encoding="utf-8" ?> <list id="list2"> |
genre toto.xsl
<?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="1.0" <xsl:output method="text" encoding="utf-8"/> <!--
<!--
</xsl:stylesheet> |
Et on appelle le tout en console avec un processeur xslt (ici xsltproc) :
xsltproc --stringparam toto "list1" toto.xsl toto.xml |
Sinon on peut aussi le faire en shell :
Code :
|
Mais bon là c'est vraiment du ligne par ligne, si à un moment t'as une balise sur plusieurs lignes genre :
Code :
|
tout s'écroule
Marsh Posté le 09-08-2007 à 22:22:13
Le parseur le plus adapté est bien sûr "xslt" mais avec "awk" ça peut le faire aussi
Important, la double-quote défini le caractère FS (File Separator) :
Code :
|
Résultat :
$ script list1
* liste sélectionnée : list1
* 1
* 2
Marsh Posté le 08-08-2007 à 17:50:28
Bonjour, j'ai un fichier xml composé de la façon suivante (c'est un exemple simplifié du fichier) :
<list id="list1">
<element id="1" another_attribute1="bla">
....
</element>
<element id="2" another_attribute1="bla">
....
</element>
....
</list>
<list id="list1">
<element id="3" another_attribute1="bla">
...
</element>
<element id="4" another_attribute1="bla">
....
</element>
....
</list>
et je souhaiterais pouvoir récupérer la valeur de chaque id pour une "list" donnée dans un script shell (bash/ksh...).
Je souhaiterais donc que le script me retourne pour la list : list1
1
2
Les id des listes je les connais et je peux donc les passer en paramètres.
J'essaye en vain de récupérer les valeurs avec sed/awk mais sans succés...
J'ai essayé de cette façon (je n'ai pas inclus le choix de la liste volontairement car je cherche à récupérer les valeurs des id en priorité, je ciblerais sur une list en particulier après) :
cat fichier.xml | grep "<element" | awk 'NF > 0 { for (i=1;i<=NF;i++) { if ( $i ~ /^[id]/ ) { print $i } } }'
ce qui me retourne :
id="1"
id="2">
(le ">" apparait quand l'attribut "id" se situe à la fin de la ligne)
Je ne sais pas trop comment aller plus loin...
Si quelqu'un avait une solution et/ou connaîtrait un outil (non graphique !) pour lire des fichiers XML ça serait sympa.
Merci d'avance.
Bye