Cours de XML - Fonctions XPath

version 1.32, dernière mise à jour le 15 février 2011.

   

Table des matières (TdM)

  1. I. Introduction
  1. II. Fonctions XPath applicables aux nœuds
    1. Fonction de comptage : la fonction count()
    2. Obtenir la position d'un nœud : les fonctions position() et last()
      1. Introduction
      2. La fonction position()
      3. La fonction last()
  1. III. Fonctions XPath applicables aux chaînes de caractères
    1. Concaténation de chaînes avec la fonction concat()
    2. Test de présence d'une sous-chaîne : les fonctions contains() et starts-with()
    3. Extraction de sous-chaîne
    4. Transformation des caractères d'une chaîne : la fonction translate()
    5. Suppression des espaces en surnombre : la fonction normalize-space()
    6. Longueur d'une chaîne: la fonction string-length()
  1. IV. Fonctions XPath applicables aux nombres
    1. Rappel : opérateurs disponibles
    2. Fonctions de manipulation
  1. V. Fonctions booléennes
    1. Fonctions booléennes constantes : true() et false()
    2. La fonction not()
    3. Test de la langue : la fonction lang()
    4. Conversion à un booléen : la fonction boolean()
    5. Exercice : Utilisation des fonctions XPath
  1. VI. Autres fonctions
    1. Accéder à un autre document avec document()
      1. Introduction
      2. Exemple

Retour au menu

Contenu du cours

I. Introduction

Nous avons vu dans un chapitre précédent que les transformations XSLT font appel à une syntaxe particulière, nommée XPath, pour identifier les nœuds que l'on souhaite manipuler. Ce chapitre va donner quelques fonctions utiles.

II. Fonctions XPath applicables aux nœuds

1. Fonction de comptage : la fonction count()

La fonction count(ensemble_de_nœuds) permet de compter le nombre de nœuds référencés. Par exemple, si dans un fichier XML on déclare la liste des 8 planètes du système solaire sous la forme de balises planete, l'instruction count(//planete) renverra la valeur 8.

>Retour à la TdM

2. Obtenir la position d'un nœud : les fonctions position() et last()

a. Introduction

Ces fonctions permettent de connaître la position d'un nœud par rapport à ses frères.

b. La fonction position()

La fonction position() retourne la position du nœud contextuel. Sur l'exemple de système solaire, si on a classé les planètes par ordre de distance croissante au Soleil dans le fichier XML, le code <xsl:value-of select="planete[position()=3]/nom"/> renvoie la valeur "Terre" (la troisième planète à partir du Soleil).

c. La fonction last()

La fonction last() permet de retourner le dernier nœud d'un ensemble de nœuds, c'est-à-dire la position du dernier nœud. Ainsi, le code <xsl:value-of select="planete[position()=last()]/nom"/> retourne la valeur "Neptune" (planète la plus éloignée du Soleil).

>Retour à la TdM

III. Fonctions XPath applicables aux chaînes de caractères

1. Concaténation de chaînes avec la fonction concat()

La fonction concat() concatène toutes les chaînes qui lui sont passées en arguments et retourne la chaîne résultant de cette concaténation. Sa syntaxe est concat(chaine1, chaine2, ...). Par exemple, <xsl:value-of select=concat('Le livre dont le titre est', livre/titre, ' a été écrit par ', livre/auteur)/> permet ainsi d'afficher la chaîne "Le livre dont le titre est Les Misérables a été écrit par Victor Hugo".

>Retour à la TdM

2. Test de présence d'une sous-chaîne : les fonctions contains() et starts-with()

Ces fonctions permettent de déterminer si une chaîne de caractères est incluse dans une autre, et renvoient un booléen. La fonction starts-with(chaine1, chaine2) renvoie la valeur true si chaine1 commence par la chaine2, false sinon. La fonction contains(chaine1, chaine2) renvoie true si chaine1 contient chaine2, false sinon.

>Retour à la TdM

3. Extraction de sous-chaîne

Il existe trois fonctions permettant d'extraire une sous-chaîne d'une chaîne donnée : substring(), substring-after() et substring-before.

  1. La fonction substring(chaine1, decalage, longueur) retourne une sous-chaîne de chaine1 contenant longueur caractères et commençant à decalage. Par exemple, substring("012345", 2, 3) renvoie la chaîne "123" ;

  2. La fonction substring-after(chaine1, chaine2) retourne la sous-chaîne de chaine1 qui suit la première occurence de chaine2. Par exemple, substring-after("012345", "2") renvoie la chaîne "345" ;

  3. La fonction substring-before(chaine1, chaine2) retourne la sous-chaîne de chaine1 qui précède la première occurence de chaine2. Par exemple, substring-before("012345", "2") renvoie la chaîne "01".

>Retour à la TdM

4. Transformation des caractères d'une chaîne : la fonction translate()

La fonction translate(chaine1, chaine2, chaine3) retourne chaine1 après y avoir remplacé chaque occurence des caractères de chaine2 par le caractère correspondant (c'est-à-dire occupant la même position) de chaine3. Par exemple, pour transformer une lettre quelconque et la mettre en majuscule, on utilise l'appel suivant de la fonction : translate(chaine, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ").

>Retour à la TdM

5. Suppression des espaces en surnombre : la fonction normalize-space()

Il est parfois nécessaire de supprimer des espaces en surnombre dans une chaîne. La fonction normalize-space(chaine) retourne la chaîne de caractères qu'elle reçoit en argument après en avoir supprimé les espaces situés au début et à la fin, et y avoir remplacé chaque séquence d'espaces consécutifs par un espace unique.

>Retour à la TdM

6. Longueur d'une chaîne: la fonction string-length()

Cette fonction retourne "classiquement" la longueur de la chaîne qu'elle reçoit en argument.

>Retour à la TdM

IV. Fonctions XPath applicables aux nombres

1. Rappel : opérateurs disponibles

Les opérateurs suivants sont disponibles en XSLT :

>Retour à la TdM

2. Fonctions de manipulation

Ces fonctions sont peu nombreuses, et nous les avons déjà rencontrées dans le chapitre sur XSLT :

>Retour à la TdM

V. Fonctions booléennes

1. Fonctions booléennes constantes : true() et false()

Il est parfois nécessaire de créer une constante booléenne initialisée à une valeur true ou false. Cette opération est réalisable par un appel respectivement aux fonctions true() et false().

>Retour à la TdM

2. La fonction not()

La fonction not(variable) retourne l'inverse de la valeur logique de son argument.

>Retour à la TdM

3. Test de la langue : la fonction lang()

La fonction lang(chaine) vérifie que la langue dans laquelle est écrit le nœud courant (telle qu'elle est définie par l'attribut xml:lang) est la même que le langage qu'elle reçoit en argument. Cette fonction reçoit une chaîne correspondant à l'un des codes de langage définis dans la spécification XML : en pour l'anglais, jp pour le japonais, fr pour le français, etc. Cela permet, avec une même feuille de style, de gérer des fichiers XML écrits dans des langues différentes.

>Retour à la TdM

4. Conversion à un booléen : la fonction boolean()

La fonction boolean(objet) convertit son argument en valeur booléenne. Le comportement de cette fonction dépend du type XPath de son argument :

>Retour à la TdM

Exercice 1. Utilisation des fonctions XPath

Énoncé
Correction

VI. Autres fonctions

1. Accéder à un autre document avec document()

a. Introduction

Il est parfois nécessaire d'accéder à un document extérieur au fichier XML en cours de transformation, pour y récupérer une information particulière. XPath le permet grâce à la fonction document(chaine). Cette fonction prend comme argument une chaîne de caractères donnant le chemin vers le fichier à ouvrir. Il faut ensuite spécifier le chemin vers l'élément cherché, à partir de la racine.

b. Exemple

Supposons que nous soyons en train de transformer un fichier biblio.xml, contenant une liste de livres, pour lesquels on donne un auteur :

<biblio>
  <livre>(...)</livre>
  <livre>(...)</livre>
  <livre>
    <titre>Les Misérables</titre>
    <auteur prénom="Victor" nom="Hugo" />
  </livre>
</biblio>

En parallèle, on dispose d'un fichier auteurs.xml possédant des références biographiques sur des auteurs, dont Victor Hugo :

<biographies>
  <auteur>(...)</auteur>
  <auteur>(...)</auteur>
  <auteur prénom="Victor" nomFamille="Hugo">
    <naissance> <date>1802</date>(...)</naissance>
    <décès> <date>1885</date>(...)</décès>
    <biographie>(...)</biographie>
  </auteur>
</biographies>

On peut obtenir, lors de la transformation du document biblio.xml, le prénom du troisième auteur du document auteurs.xml en tapant par exemple <xsl:value-of select="document(’auteurs.xml’)//auteur[3]/@prénom".

Lors de la transformation du fichier biblio.xml, on peut aussi recourir à des commandes plus complexes :

<xsl:variable name="nomAuteur" select="@nom" />
<xsl:variable name="prénomAuteur" select="@prénom" />
<xsl:value-of select="document('auteurs.xml')//auteur[@prénom=$prénomAuteur and @nomFamille=$nomAuteur]/naissance/date" />
<xsl:value-of select="document('auteurs.xml')//auteur[@prénom=$prénomAuteur and @nomFamille=$nomAuteur]/décès/date" />

>Retour à la TdM

Historique de ce document

Bibliographie

De l'auteur (G. Chagnon)

Conditions d'utilisation et licence

Creative Commons License
Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

Retour au menu