XPath - Prédicats (exemples)

Reprenons l'exemple précédent : 



Expression XPath Forme contractée Nodeset
les sections de niveau 2 I
/descendant::section[attribute::niveau=2] //section[@niveau=2] 21, 28
les titres des sections de niveau 2 II
/descendant::section[attribute::niveau=2]/attribute::titre //section[@niveau=2]/@titre J, L
les acronymes contenus dans la première section de niveau 2 du dernier chapitre III
/descendant::chapitre[position() = last()]/descendant::section[attribute::niveau = 2][position() = 1]/child::acronyme //chapitre[last()]//section[@niveau = 2][position() = 1]/acronyme 23, 26
le titre des chapitres ne contenant aucun paragraphe IV
/descendant::chapitre[count(descendant::paragraphe) = 0]/attribute::titre //paragraphe[count(//paragraphe) = 0]/@titre A

Remarques
  • La fonction position() renvoie la position de l'élément considéré dans le nodeset courant. L'ordre des éléments dans un nodeset est l'ordre d'apparition des éléments dans le document (parcours descendant gauche-droit de l'arbre).
  • L'ordre des prédicats est important. Dans l'exemple III, si l'on remplace les deux prédicats [attribute::niveau=2][position()=1] par [position()=1][attribute::niveau=2], le nodeset obtenu est vide. En effet, le chemin /descendant::chapitre[position() = last()]/descendant::section désigne toutes les sections dans la descendance du dernier chapitre (nodeset {16, 21, 28, 32}). Le prédicat [position() = 1] sélectionne le premier élément du nodeset précédent : {16}. Appliquer à ce nodeset le le prédicat [attribute::niveau=2] renvoie alors le nodeset vide.
  • Il n'y a rien qui vous choque dans la première remarque ?

Précédent... ] Sommaire... ] Suivant... ]