value-of


Syntaxe
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 &lt; &gt; et &amp;
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 &gt; b alors a + c &gt; 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 &gt; b alors a + c &gt; 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

 

Précédent... ] sommaire... ] Suivant... ]