Les expressions Xpath sont à XSL ce que sont, aux CSS, les sélecteurs. Elles permettent de désigner un sous-ensemble d'élements dans une arborescence XML. La désignation d'un ensemble d'élément ressemble à un chemin d'accès à un fichier dans un attribut href. Le chemin peut être relatif ou absolu.
/monde : l'élément racine monde du document XML
/monde/continent : les éléments continents
/monde/continent/liste/pays/capitale : l'ensemble des éléments "capitale"
<xsl:template match="continent">
<html>
<body>
<xsl:apply-templates select="liste/pays"/>
</body>
</html>
</xsl:template>
Dans cette règle qui s'applique aux éléments continent (attribut "match"), l'expression liste/pays est donc relative à l'élément courant continent et désigne les éléments pays, enfants de l'élément "liste" enfant d'un élément continent.
Ainsi dans le document monde.xml ( voir section précédente ) : //nom désigne autant les noms de continent que les noms de pays.
"/*" désigne tout enfant de la racine
"*" désigne tout élément enfant de l'élément courant, "*" est équivalent à "./*"
"*/*" désigne tout élément enfant d'un élément enfant de l'élément courant
"pays/*" désigne les éléments enfant de l'élément pays enfant de l'élément courant
"/*/nom" désigne tout élément nom, enfant d'un élément enfant de la racine
../liste désigne l'élément liste enfant du parent de l'élément courant (liste est frère de l'élément courant)
/monde/continent/nom[1] désigne le nom du premier continent
/monde/continent/liste/pays[last()] désigne le dernier pays d'un continent
/monde/continent/liste/pays[last()]/nom désigne le nom du dernier pays d'un continent
/monde/continent[2]/liste/pays[last()]/nom désigne le nom du dernier pays du deuxième continent
/monde/continent/liste/pays[postion() < 10] désigne les dix premiers pays d'un continent
//pays[@id] désigne les pays ayant un attribut id
/monde/continent[@*] désigne les continents doté d'un attribut
/monde/continent[not(@*)]/liste/pays[@id] désigne les pays doté d'un attribut id petits-enfants de continents sans attributs
//pays[@organisation='OTAN'] désigne les pays ayant un attribut organisation ayant pour valeur OTAN
/monde/continent[@*] désigne les continents doté d'un attribut
La fonction count(ensemble de noeuds) permet de compter le nombre d'élements dans l'ensemble de noeuds
<xsl:template match="monde">
<html>
<body>
<h1> Le monde : <xsl:value-of select="count(continent)"/> contnents</h1>
<xsl :apply-templates select="continent">
</body>
</html>
</xsl:template>
<xsl:template match="continent">
<h2> <xsl:value-of select="nom"/> : <xsl:value-of select="count(liste/pays)"/> pays </h2>
</xsl:template>
La fonction position() renvoie le numéro d'ordre d'un element parmi l'ensemble des noeuds désignés par l'appel de le règle
<xsl:template match="monde">
<html>
<head><style type="text/css" rel="stylesheet">h2 {color:red;}</style></head>
<body>
<h1> Le monde : <xsl:value-of select="count(continent)"/> contnents</h1>
<xsl :apply-templates select="continent">
</body>
</html>
</xsl:template>
<xsl:template match="continent">
<h2> <xsl:value-of select="nom"/> : <xsl:value-of select="count(liste/pays)"/> pays </h2>
<xsl :apply-templates select="liste/pays">
</xsl:template>
<xsl:template match="pays">
<p><xsl:value-of select="position()"/> : <xsl:value-of select="nom"/> </p>
</xsl:template>
<xsl:template match="monde">
<html>
<head><style type="text/css" rel="stylesheet">h2 {color:red;}</style></head>
<body>
<h1> Le monde : <xsl:value-of select="count(continent)"/> contnents</h1>
<xsl :apply-templates select="//pays">
</body>
</html>
</xsl:template>
<xsl:template match="pays">
<p><xsl:value-of select="position()"/> : <xsl:value-of select="nom"/> </p>
</xsl:template>
La fonction sum(ensemble de noeuds) permet de sommer les valeurs numériques de l'ensemble de noeuds
soit le fichier XML suivant
<a>
<b>10</b>
<b>2</b>
<b>5</b>
</a>
<xsl:template match="a">
<html>
<body>
<xsl:apply-templates select="b">
<xsl:value-of select="sum(b)">
</body>
</html>
</xsl:template>
<xsl:template match="b">
<xsl:value-of select="."/>
</xsl:template>
La fonction name() permet de récupérer le mom de l'élément défini dans l'attribut "match" de la règle
<xsl:template match="a">
<html>
<body>
<xsl:apply-templates select="*">
<xsl:value-of select="name()"><xsl:value-of select="sum(b)">
</body>
</html>
</xsl:template>
<xsl:template match="a/*">
<xsl:value-of select="name()"><xsl:value-of select="."/>
</xsl:template>