TechWeb
Accueil Codage HTML CSS DESIGN XML LaboCSS

Expressions Xpath

Désignation d'un élément

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.

Chemin 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"

Chemin relatif

<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.

La notation //

Ainsi dans le document monde.xml ( voir section précédente ) : //nom désigne autant les noms de continent que les noms de pays.

Caractères génériques

"/*" 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)

Numero d'ordre d'un élément

/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() &lt; 10] désigne les dix premiers pays d'un continent

Les attributs

Présence d'attributs

//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

valeur d'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

Quelques fonctions XPATH

count()

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>

voir le résultat

position()

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>

voir le résultat

<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>

voir le résultat

sum()

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>

voir le résultat

name()

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>

voir le résultat

Valid XHTML 1.0 Strict Valid CSS!

Copyright Gabriel Braun 2007