L'instruction
value-of
permet d'accéder à la valeur d'un nodeset. Cet élément
possède toujours l'attribut
select
dont la valeur est l'XPath du nodeset à évaluer :
<xsl:value-of select="expression
xpath"/>
sera remplacé, lors de la transformation, par la valeur du nodeset
désigné par l'élément XPath. Cette dernière
peut être relative à l'élément courant ou
absolue.
En considérant le document XML suivant :
<couples>
<descr id='6815'>Liste des couples
forme-lemme</descr> <descr
id='4855'>Cette liste...</descr> <couple><form>Il</form><lemma>il</lemma></couple>
<couple><form>était</form><lemma>être</lemma></couple>
<couple><form>une</form><lemma>un</lemma></couple>
<couple><form>fois</form><lemma>fois</lemma></couple>
... </couples> |
et en lui associant la feuille de style : |
|
on obtient : |
<xsl:template match="couple[position()=2]">
forme token : <xsl:value-of select="./form/text()"/>
lemme token : <xsl:value-of select="./lemme/text()"/>
desc : <xsl:value-of select="//descr[@id='6815']"/>
</xsl:template>
|
|
forme token : était
lemme token : être
desc : Liste des couples forme-lemme
|
Les deux premières expressions
value-of
comportent chacune un attribut
select
dont l'XPath est relatif à l'élément courant (le
deuxième élément
couple)
et sélectionne le texte de tel élément enfant (
form
ou
lemma). La dernière expression
value-of sélectionne un élément
n'ayant pas de relation immédiate avec l'élément
courant et dont l'XPath est exprimé de manière absolue (l'élément
descr dont l'attribut
id
vaut 6815 : aucune référence à l'élément
courant).
Évaluation
Nous avons vu la syntaxe de l'instruction
value-of,
mais comment est calculée la valeur d'un élément ?
Voir la section
valeur textuelle
du chapitre sur XPath.
Tricky : disable-output-escaping
Dans un document XML, les caractères
<,
> et
&
sont interdits (sauf pour définir des balises et des entités).
Lorsqu'on veut les faire apparaître dans la valeur textuelle d'un
élément, on doit les remplacer par
<
> et
&
Par défaut, lors de la restitution de la valeur textuelle par
value-of,
ces caractères sont reproduits en sortie en gardant leur forme
"entité". Il est possible, en ajoutant l'attribut
disable-output-escaping="yes"
d'obtenir en sortie les caractères initiaux. Exemple :
<corollaire>
Si a > b alors
a + c > b + c
</corollaire>
|
XSLT |
|
sortie |
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="corollaire">
<xsl:value-of select="."/>
</xsl:template> |
|
Si a > b alors
a + c > b + c |
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="corollaire">
<xsl:value-of select="."
disable-output-escaping="yes"/>
</xsl:template> |
|
Si a > b alors
a + c > b + c
|