xmlstarlet – manipuler du XML en shell
A l’époque où le JSON est roi, ce billet fait un peu tâche, non ? Pourtant le XML est toujours là, plutôt côté serveur, bien discret. Et même s’il n’est plus aussi populaire que le JSON, nous sommes parfois amené à le manipuler.
Pour tout ce qui est transformation de document, vous pouvoir aller voir du côté du bien connu XSL. Mais si vous souhaitez seulement explorer un XML pour y extraire simplement et rapidement des informations dans un script shell ou en ligne de commande, je ne saurais vous conseiller xmlstarlet.
Installation
$sudo apt-get install xmlstarlet
Usage
Imaginons que vous souhaitiez connaitre le nombre de billets disponibles sur le flux RSS de ce blog. Rien de plus simple :
$ curl -s -L https://blog.lecacheur.com/feed/ | xmlstarlet sel -t -v "count(//item)" -n 10
De même, si vous souhaitez lister les billets avec leur URL:
$ curl -s -L https://blog.lecacheur.com/feed/ | xmlstarlet sel -t -m "//item" -v title -o " : " -v "feedburner:origLink" -n Le statique est la nouvelle dynamique : https://blog.lecacheur.com/2018/12/18/le-statique-est-la-nouvelle-dynamique/ Apache – bloquer l’accès HTTP à certains pays : https://blog.lecacheur.com/2018/11/27/apache-bloquer-lacces-http-a-certains-pays/ Installer un Raspberry Pi Zero sans périphérique : https://blog.lecacheur.com/2018/10/10/installer-un-raspberry-pi-zero-sans-peripherique/ Git – le b.a.-ba – mettre de côté son travail : https://blog.lecacheur.com/2018/06/14/git-le-b-a-ba-mettre-de-cote-son-travail/ Devoxx France 2018, encore et toujours ! : https://blog.lecacheur.com/2018/05/03/devoxx-france-2018-encore-et-toujours/ Swagger, OpenAPI ou OpenAPI Spec ? : https://blog.lecacheur.com/2018/02/20/swagger-openapi-ou-openapi-spec/ Debug d’une application web locale sur un mobile avec Chrome : https://blog.lecacheur.com/2018/01/16/debug-dune-application-web-locale-sur-un-mobile-avec-chrome/ Installer Scrapy sous Windows : https://blog.lecacheur.com/2017/12/28/installer-scrapy-sous-windows/ Le Nextbit Robin et le debugging USB : https://blog.lecacheur.com/2017/12/26/le-nextbit-robin-et-le-debugging-usb/ Tester en local les Firebase Functions : https://blog.lecacheur.com/2017/11/03/tester-en-local-les-firebase-functions/
Même si j’aurais tendance à préférer l’utilisation de cURL, xmlstarlet est capable de récupérer un document XML via une URL et l’option --net
:
$ xmlstarlet sel --net -t -m "//item" -v title -n http://feeds.feedburner.com/LeWeblogueDeSeb Le statique est la nouvelle dynamique Apache – bloquer l’accès HTTP à certains pays Installer un Raspberry Pi Zero sans périphérique Git – le b.a.-ba – mettre de côté son travail Devoxx France 2018, encore et toujours ! Swagger, OpenAPI ou OpenAPI Spec ? Debug d’une application web locale sur un mobile avec Chrome Installer Scrapy sous Windows Le Nextbit Robin et le debugging USB Tester en local les Firebase Functions
Il est bien évidemment possible de récupérer un élément particulier dans une liste, comme par exemple pour récupérer le titre du dernier billet publié :
$ xmlstarlet sel --net -t -m '//item[1]' -v title -n http://feeds.feedburner.com/LeWeblogueDeSeb Le statique est la nouvelle dynamique
Il est également possible de manipuler des documents HTML avec l’option --html
comme ceci :
$ xmlstarlet sel --net --html -t -m "//src" -v "@src" -n http://blog.lecacheur.com/
Cependant, je n’ai pas réussi à extraire des informations car il y avait régulièrement des erreurs HTML ou d’entités manquantes…
Conclusion
Nous avons vu comment extraire des données, qui est le cas le plus courant. Mais il faut savoir que xmlstarlet est une vraie boîte à outil pour le XML. Il est capable de modifier un document, d’appliquer des transformation XSL, de valider ou formatter un document, afficher la structure, etc…
xmlstarlet est donc un outil très simple qui peut se révéler très efficace quand il s’agit d’automatiser des traitements basés sur des informations stockées dans des documents XML.
A vos scripts bash !
https://blog.lecacheur.com/2019/01/10/xmlstarlet-manipuler-du-xml-en-shell/https://blog.lecacheur.com/wp-content/uploads/2019/01/xmlstarlet.pnghttps://blog.lecacheur.com/wp-content/uploads/2019/01/xmlstarlet-150x150.pngDéveloppementLinuxbash,shell,xmlA l'époque où le JSON est roi, ce billet fait un peu tâche, non ? Pourtant le XML est toujours là, plutôt côté serveur, bien discret. Et même s'il n'est plus aussi populaire que le JSON, nous sommes parfois amené à le manipuler. Pour tout ce qui est transformation de...SeBSébastien LECACHEUR23r0@laposte.netAdministratorLe weblogue de SeB
Merci pour l’info. Je ne connaissais pas et ça peut vraiment rendre service.
C’est un vieux projet que je n’ai découvert que très récemment. Et il est bien plus pratique que d’utiliser grep, sed ou awk quand on un fichier XML.
Merci bcq