UPPREVIOUSNEXT  Technologies Internet et Education, © TECFA
  4. XPATH et extraction de valeurs

4. XPATH et extraction de valeurs

Exemple d’un simple XPATH:

<xsl:template match="page
">
  <xsl:apply-templates select
="title
"/>
</xsl:template>

"page" et "title sont des expressions XPath définissant un chemin de localisation

"

<xsl:template match="content">
  <xsl:apply-templates select
="page/comment
"/>

</xsl:template>

"/page/comment" est une expression XPath un peu plus compliquée

 

XPath est nettement plus puissant que les sélecteurs CSS. Avec XPath vous pouvez par exemple dire "Identifiez le 4ème mot du 2ème paragraph qui suit un titre qui commence par le mot ’début’".

4.1 Récapitulatif de chemins simples de localisations XPATH

Voir aussi:

 

Elément
syntaxique

(Type de chemin)

Exemple d’un chemin

Exemple d’un match réussi par rapport au chemin indiqué à gauche

balise

nom d’élément

project

<project> ...... </project>

/

sépare enfants directs

project/title

<project> <title> ... </title>

 

/

(correspond à l’élément racine)

//

descendant

project//title

<project><problem> <title>....</title>

 

//title

<racine>... <title>..</title> (n’mporte où)

*

"wildcard"

*/title

<bla> <title>..</title> et <bli> <title>...</title>

|

opérateur "ou"

title|head

<title>...</title> ou <head> ...</head>

 

*|/|@*

(tous les éléments: les enfants, la racine et les attributs de la racine)

.

élément courant

.

 

../

élément supérieur

../problem

<project>

@

nom d’attribut

@id

<xyz id="test">...</xyz>

 

project/@id

<project id="test" ...> ... </project>

@attr=’type’

 

list[@type=’ol’]

<list type="ol"> ...... </list>

 

 

 

4.2 Extraction d’une valeur

A. xsl:value-of

Exemple:

  • La règle suivante se déclenche dès qu’une balise <projet> est trouvée
  • Elle insère dans le document de sortie le contenu de l’élément <title> qui se trouve à l’intérieur d’un sous-élément <problem>
<xsl:template match="project">
    <P>
      <xsl:value-of select="problem/title"/>
    </P>
  </xsl:template>

Syntaxe spéciale pour insérer la valeur d’un objet dans le string d’un attribut à générer:

{....}

<xsl:template match="contact-info">
....
  <a href="mailto:{@email}
"><xsl:value-of select="@email"/></a>
...

{@email} insère la valeur de l’attribut email de l’élément courrant, par exemple:

<contact-info email="test@test">

B. xsl:copy

Scénarios d’usage

  • Utile pour reproduire l’original (ici un tag <p>...</p>)
  <xsl:template match="p">
   <xsl:copy> <xsl:apply-templates/> </xsl:copy>
  </xsl:template>
  • Utile pour récupérer tout ce qui n’a pas été défini, mais attention si le tag ne correspond pas à un tag HTML il faut regarder le source HTML produit et agir ....
<xsl:template match="*">
   <xsl:copy>Garbage: <i> <xsl:apply-templates/> </i> </xsl:copy>
  </xsl:template>
  • Le fragment suivant copie tous les éléments non traités par les autres templates:
    • utile si vous utilisez des balises XHTML que vous ne désirez pas traiter ou encore si XSLT sert juste à "enrichir" votre code XML (genre table de matières)
<xsl:template match="*|@*">
  <xsl:copy>
   <xsl:apply-templates select="@*"/>
   <xsl:apply-templates select="node()"/>
  </xsl:copy>
 </xsl:template> 

UPPREVIOUS NEXT -- TIE