Cours en Devlopement Informatique

  • XML

XML XSLT



I. Les expressions de sélection

1.1. Introduction

Connues en anglais sous le nom de XSL patterns, les expressions de sélection sont des chaînes de caractères qui permettent de sélectionner des noeuds dans un document source. Il est également possible d'utiliser une syntaxe spéciale, appelée XPath, qui permet, en se fondant sur la structure arborescente du document XML (le Document Object Model -DOM), de faire référence à des éléments et/ou des attributs.

1.2. Sélection d'éléments et d'attributs

 

 1.2.1. Sélection d'élément, syntaxe de base

L'exemple le plus simple d'expression de sélection est le nom d'un type d'élément. Cette expression sélectionne tous les éléments du type précisé descendant ou ancêtre d'un noeud donné. Exemple :

<xsl:value-of select="nom_element" />

L'opérateur / permet de définir le chemin d'accès aux éléments à sélectionner, et donc leur parenté. Par exemple, section/paragraphe sélectionne les éléments section du noeud courant et pour chaque élément section, sélectionne les éléments paragraphe qu'il contient. En d'autres termes, cette expression sélectionne les petits-fils paragraphe du noeud courant qui ont pour père un noeud section.

Un nom d'élément peut être remplacé par * dans une expression. Par exemple, */paragraphe sélectionne tous les petits-fils paragraphe quel que soit leur père.

L'utilisation de // permet d'appliquer la recherche aux descendants et non pas seulement aux fils directs. Par exemple, section//paragraphe sélectionne tous les éléments paragraphe descendant d'un élément section fils direct du noeud courant.

Le caractère . sélectionne le noeud courant. Par exemple, .//paragraphe sélectionne tous les descendants paragraphe du noeud courant.

La chaîne .. sélectionne le père du noeud courant. Par exemple, ../paragraphe sélectionne tous les noeuds paragraphe frères du noeud courant.

 1.2.2. Sélection d'élément, appel de fonctions

L'expression comment() sélectionne tous les noeuds commentaires fils du noeud courant.

L'expression text() sélectionne tous les noeuds fils du noeud courant, ne contenant que du texte.

L'expression node() sélectionne tous les noeuds fils du noeud courant.

L'expression id("UnIdentifiant") sélectionne l'élément, normalement unique, qui a un attribut attr de type ID (cf. le paragraphe "Déclaration d'attribut de type ID") valant "UnIdentifiant".

 1.2.3. Sélection d'élément et DOM

Il est également possible de "naviguer" dans les branches de l'arborescence du document XML, en utilisant les ressources du DOM. Différents types de syntaxes sont possibles, fondées sur une expression de la forme Element[Expression]. Par exemple :

elt[i] où i est un nombre entier désigne le i-ème descendant direct d'un même parent ayant le nom indiqué. Par exemple, paragraphe[3] désigne le 3ème enfant de l'élément courant, portant le nom paragraphe. Attention, la numérotation commence à 1 et non à 0.

elt[position()>i] où i est un nombre entier sélectionne tous les éléments précédés d'au moins i éléments de même nom comme descendants du même parent. Par exemple, paragraphe[position()>5] sélectionne tous les éléments paragraphe dont le numéro d'ordre est strictement supérieur à 5.

elt[position() mod 2 =1] sélectionne tout élément qui est un descendant impair.

elt[souselt] sélectionne tout élément elt qui a au moins un descendant souselt (à ne pas confondre avec elt/souselt, qui sélectionne tout élément souselt ayant pour parent elt...).

elt[first-of-any()] sélectionne le premier élément elt fils de l'élément courant.

elt[last-of-any()] sélectionne le dernier élément elt fils de l'élément courant.

elt[first-of-type()] sélectionne l'élément elt fils de l'élément courant, s'il est premier de son type. Par exemple, si l'élément section peut contenir des noeuds de type texte paragraphe et sous_section dans le désordre, l'expression paragraphe[first-of-type()] ne sélectionnera le premier élément paragraphe que s'il n'y a aucun élément sous_section avant lui.

elt[last-of-type()] sélectionne de même l'élément elt fils de l'élément courant, s'il est le dernier de son type.

Par exemple, l'expression section/paragraphe[last-of-type() and first-of-type()] sélectionne les éléments paragraphe fils uniques dont le père est un élément section ; l'expression section/paragraphe[last-of-any() and first-of-any()] sélectionne les éléments paragraphe dont le père est un élément section qui ne contient qu'un seul élément paragraphe.

La fonction ancestor() permet la sélection d'un ancêtre du noeud courant. Elle reçoit en argument une expression de sélection et recherche le premier ancêtre du nom correspondant à la sélection. Par exemple, ancestor(chapitre)/titre sélectionne l'élément titre du chapitre contenant l'élément courant.

 1.2.4. Sélection d'attributs

Les attributs d'un élément sont sélectionnés en faisant précéder leur nom par le caractère @. Les règles relatives à la sélection des éléments s'appliquent également aux attributs :

  • section[@titre] sélectionne les éléments section qui ont un attribut titre.

  • section[@titre="Introduction"] sélectionne les éléments section dont l'attribut titre a pour valeur Introduction.

Si l'on veut afficher le contenu de l'attribut, on le fait précéder du caractère /. Par exemple, <xsl:value-of select=paragraphe/@titre permet l'affichage du titre de l'élément paragraphe fils de l'élément courant (si rien n'est précisé, par défaut il s'agit du premier élément paragraphe fils).

 1.2.5. Opérateurs logiques

Les opérateurs logiques not(), and et or peuvent être utilisés, comme par exemple section[not(@titre)] sélectionne les éléments section qui n'ont pas d'attribut titre. Attention : lorsque, dans la DTD par exemple, l'attribut est défini comme ayant une valeur par défaut, même s'il n'est pas explicité dans le document XML, il est considéré comme existant.

Exercices XSLT Corrigés

Introduction XML

Ajouter un commentaire

Veuillez vous connecter pour ajouter un commentaire.

Pas encore de commentaires.