L'objectif de cet exercice est la familiarisation avec
XPath. Pour cela nous allons utiliser le parseur XML xmllint
qui permet également de naviguer dans une document XML en utilisant
des expressions XPath. Pour cela, le parseur est lancé en mode shell
avec la commande suivante (les autres options sont affichées en
éxécutant xmllint sans paramètre) :
prompt> xmllint --shell Fichier.xml
Les commandes les plus importantes du shell xmllint sont :
-
base retourne l'URL du document XML qu'on est en train
d'inspecter ;
- du affiche la structure du document ;
- ls expXpath affiche les fils des noeuds trouvés par
l'expression expXpath (sans leur contenu !) ;
- cat expXpath affiche le contenu de l'ensemble des
noeuds trouvés par l'expression expXpath ;
- cd expXpath change le noeud contexte vers le
noeud trouvé par l'expressions expXpath (attention,
expXpath doit retourner un seul noeud) ;
- pwd affiche le chemin de la racine qui mène au noeud
contexte.
Le paramètre expXpath est optionnelle pour les commandes
ls et cat, qui s'appliquent alors au noeud
contexte.
Voici l'extrait d'une session
de navigation avec le document Vertigo.xml :
prompt> xmllint --shell Vertigo.xml
/ > base
Vertigo.xml
/ > du
FILM
TITRE
AUTEUR
ANNEE
GENRE
PAYS
RESUME
/ > ls */TITRE
t-- 7 Vertigo
/ > cd FILM
FILM > ls
t-- 5
--- 1 TITRE
t-- 5
--- 1 AUTEUR
t-- 5
--- 1 ANNEE
t-- 5
--- 1 GENRE
t-- 6
--- 1 PAYS
t-- 5
--- 1 RESUME
t-- 1
FILM > cd *[1]
TITRE > cat
<TITRE>Vertigo</TITRE>
TITRE > pwd
/FILM/TITRE
TITRE > cd ../..
/ > cat //*[contains(text(),'Scottie')]
-------
<RESUME>Scottie Ferguson, ancien inspecteur de police, est sujet
au vertige depuis qu'il a vu mourir son collègue. Elster, son
ami, le charge de surveiller sa femme, Madeleine, ayant des
tendances suicidaires. Amoureux de la jeune femme Scottie ne
remarque pas le piège qui se trame autour de lui et dont il va
être la victime...
</RESUME>
/ > bye
On lance le programme en mode shell et on affiche d'abord l'URL du
document avec la commande base. La structure principale du
document est affichée avec la commande du et la commande
ls */TITRE affiche le contenu des noeuds trouvé par
l'expression */TITRE. L'élément racine devient le nouveau
noeud contexte avec la commande cd FILM. Ce noeud à 13
fils (commande ls) dont 7 sont de type Text et 6 de
type Element. On passe ensuite au premier sous-élément et on
affiche sa représentation sérialisée avec la commande cat. Le
chemin vers le noeud contexte est maintenant /FILM/TITRE.
On retourne vers le noeud racine et on affiche la représentation
sérialisée de tous les noeuds avec un fils texte contenant la
chaîne de caractères Scottie. Voici une façon amusante
d'apprendre XPath !
Exercice:
-
Téléchargez le document suivant : FilmsArtistes.xml
- Vérifiez avec la commande xmllint si ce document est bien formé.
- Lancez xmllint en mode shell avec le document FilmsArtistes.xml.
- Affichez la structure du document avec la commande du.
- Allez dans l'élément racine avec la commande cd.
- Allez dans le premier fils de l'élément racine.
- Affichez la structure de cet élément.
- Affichez les éléments fils de cet élément.
- Affichez le contenu textuel de cet élément.
- Affichez tous les titres de films dans le document.
- Les titres des films d'horreur.
- Le résumé d'Alien.
- Les titres des films avec James Stewart. ATTENTION, envoyez cette réponse à dgram.at.cnam.fr avec comme sujet "tvalc 1 <votre nom>". Vous pouvez utiliser la commande mail dgram.at.cnam.fr en vous laissant guider. Mettez un point seul en début de ligne pour indiquer la fin de votre message;
- les titres des films avec James Stewart et Kim Novak.
- Les titres des films avec un résumé ?
- Les titres des films sans résumé ?
- Quel est l'identifiant du metteur en scène du film Vertigo?
- Quel rôle joue Harvey Keitel dans le film Reservoir dogs ?
- Quel est le dernier film du document ?
- Quel est le titre du film qui précède immédiatement
le film Shining (dans l'ordre du document).
- Qui a mis en scène le film Eyes Wide Shut ?
- Donnez les titres des films qui contiennent un 'V'
(utiliser la fonction contains)
- Donner les noeuds qui ont exactement trois descendants
(utiliser la fonction count).
- Donner les noeuds dont le nom contient la chaîne 'TU'
(fonction name)