Vous êtes sur la page 1sur 2

TP N 4

Expressions XPath

Solution

Exercice 1
Expression n°1
Le but de cette première expression était de sélectionner tous les nœuds descendants du deuxième nœud "personne" :
Code : XPath
/repertoire/personne[position()=2]/descendant::*
Expression n°2
Le but de cette expression était de sélectionner le nœud "personne" correspondant à un individu ayant au moins 2 numéros de
téléphone :
Code : XPath
/repertoire/personne[count(telephones/telephone) > 1]
Expression n°3
Le but de cette troisième expression était de sélectionner tous les nœuds "personne" :
Code : XPath
/repertoire/personne
ou encore :
Code : XPath
//personne
Expression n°4
Le but de cette expression était de sélectionner le deuxième nœud "personne" dont le pays de domiciliation est la France :
Code : XPath
/repertoire/personne[adresse/pays="FRANCE"][position()=2]
Expression n°5
Le but de la dernière expression était de sélectionner tous les nœuds "personne" de sexe masculin le pays de domiciliation est
les Etats-Unis :
Code : XPath
/repertoire/personne[@sexe="masculin"][adresse/pays="USA"]

4
Solution
Exercice 2
Il existe plusieurs possibilités, à chaque fois plus ou moins optimales, sachant que l’on
peut jouer sur le nombre de parcours nécessaires dans l’arbre.
– Trouver la liste des chapitres de la première section :
/child::livre/child::sections/child::section[1]/child::chapitre
– Trouver la liste des attributs du premier auteur :
/child::livre/child::auteurs/child::auteur[1]/attribute::*
– Trouver la valeur de l’attribut nom du deuxième auteur :
string( /child::livre/child::auteurs/child::auteur[2]/attribute::nom )
– Trouver la liste des chapitres contenant deux paragraphes :
/descendant::chapitre[count(child::paragraphe)=2]
– Trouver la liste des chapitres dont un paragraphe possède le mot Premier :
/descendant::chapitre[contains(child::paragraphe,'Premier')]
– Trouver la liste des sections ayant un chapitre :
/descendant::section[count(child::chapitre)=1]
– Trouver la liste des éléments ayant un seul attribut :
/descendant::*[count(attribute::*)=1]
– Trouver la liste des éléments ayant un ancêtre sections :
1. /child::livre/child::sections/descendant::*
2. /descendant::*[ancestor::sections]
– Trouver la liste des attributs titre :
/descendant::*/attribute::titre
– Trouver la liste des éléments ayant deux fils et pas d’attribut :
/descendant-or-self::*[count(child::*)=2 and count(attribute::*)=0]
– Trouver la liste des sections sans paragraphe :
/descendant::section[count(descandant::paragraphe)=0]
– Trouver la liste des éléments dont le texte contient le mot paragraphe :
//descendant::text()[contains(self::text(), 'paragraphe')]/parent::*

Partie 2 abrége
– Trouver la liste de nœuds auteur :
//auteur
– Trouver la liste de tous les nœuds section :
//section
– Trouver la liste des chapitres de la première section :
/livre/sections/section[1]/chapitre
– Trouver la liste des attributs du premier auteur :
/livre/auteurs/auteur[1]/@*
– Trouver la valeur de l’attribut nom du deuxième auteur :
string( /livre/auteurs/auteur[2]/@nom )
– Trouver la liste des sections avec deux chapitres :
//section[count(chapitre)=2]
– Trouver la liste des paragraphes dont le parent a pour titre Chapitre1 :
//paragraphe[../@titre='Chapitre1']