GNU/Linux >> Tutoriels Linux >  >> Linux

Comment parser XML en utilisant shellscript ?

Voici un exemple de travail complet.
S'il ne s'agit que d'extraire des adresses e-mail, vous pouvez simplement faire quelque chose comme :
1) Supposons que le fichier XML spam.xml ressemble à

<spam>
<victims>
  <victim>
    <name>The Pope</name>
    <email>[email protected]</email>
    <is_satan>0</is_satan>
  </victim>
  <victim>
    <name>George Bush</name>
    <email>[email protected]</email>
    <is_satan>1</is_satan>
  </victim>
  <victim>
    <name>George Bush Jr</name>
    <email>[email protected]</email>
    <is_satan>0</is_satan>
  </victim>
</victims>
</spam>

2) Vous pouvez récupérer les e-mails et les traiter avec ce court code bash :

#!/bin/bash
emails=($(grep -oP '(?<=email>)[^<]+' "/my_path/spam.xml"))

for i in ${!emails[*]}
do
  echo "$i" "${emails[$i]}"
  # instead of echo use the values to send emails, etc
done

Le résultat de cet exemple est :

0 [email protected]
1 [email protected]
2 [email protected]

Remarque importante :
Ne l'utilisez pas pour des choses sérieuses. C'est OK pour jouer, obtenir des résultats rapides, apprendre grep, etc. mais vous devriez définitivement rechercher, apprendre et utiliser un analyseur XML pour la production (voir le commentaire de Micha ci-dessous).


Vous pouvez essayer xmllint

Le programme xmllint analyse un ou plusieurs fichiers XML, spécifiés sur la ligne de commande en tant que fichier xml. Il imprime divers types de sortie, selon les options sélectionnées. Il est utile pour détecter les erreurs à la fois dans le code XML et dans l'analyseur XML lui-même

Il vous permet de sélectionner des éléments dans le document XML par xpath, en utilisant l'option --pattern.

Sur Mac OS X (Yosemite), il est installé par défaut.
Sur Ubuntu, s'il n'est pas déjà installé, vous pouvez exécuter apt-get install libxml2-utils


Je suis surpris que personne n'ait mentionné xmlsh. L'énoncé de mission :

Un shell de ligne de commande pour XML Basé sur la philosophie et la conception des shells Unix

xmlsh fournit un environnement de script familier, mais spécifiquement conçu pour les processus de script xml.

Une liste de commandes de type shell est fournie ici.

J'utilise le xed command a lot qui équivaut à sed pour XML, et autorise XPath recherche et remplacement basés.


Il y a aussi xmlstarlet (qui est également disponible pour Windows).

http://xmlstar.sourceforge.net/doc/xmlstarlet.txt


Linux
  1. Comment analyser XML et supprimer les balises à l'aide d'exemples XPATH sous Linux (Comment combiner plusieurs commandes à l'aide de PIPE sous Linux)

  2. Comment joindre un fichier en utilisant la commande mail sous Linux ?

  3. Comment mettre par défaut Python3.8 sur mon Mac en utilisant Homebrew ?

  4. Comment remplir un fichier avec FF en utilisant dd ?

  5. Comment supprimer un fichier sans utiliser rm ?

Comment renommer des fichiers en utilisant la ligne de commande sous Linux

Comment lister les systèmes de fichiers sous Linux à l'aide de Lfs

Comment installer NethServer 7.3 en utilisant ISO

Comment analyser ou afficher le code XML dans la ligne de commande Linux

Comment :une introduction à l'utilisation de Git

Comment se connecter à MySQL en utilisant PHP