Pourquoi XSLT ne m'affiche t'il rien quand j'écris <xsl:value-of
select="text()" />?
Eric van der Vlist,
Dyomedea (vdv@dyomedea.com).
vendredi 30 mars 2001
J'ai le fichier XMLsuivant:
<?xml version="1.0" encoding="iso-8859-1"?>
<toto>
<machin>
<truc>du truc</truc>
du machin mais pas du truc
</machin>
</toto>
Et souhaite afficher la chaîne "du machin mais pas du
truc", mais le template:
<xsl:template match="machin">
<xsl:value-of select="text()"/>
</xsl:template>
N'affiche rien.
Il s'agit d'un piège de l'instruction XSLT
xsl:value ainsi définie
dans la recommandation:
"L'élément xsl:value-of est instancié pour créer
un noeud textuel de l'arbre résultant. L'attribut obligatoire select est une
expression ; cette expression est évaluée et l'objet résultant est converti en
une chaîne de caractères comme l'aurait fait la fonction string."
La fonction string étant définie par XPath de la manière suivante:
"Un ensemble de noeuds est converti en chaîne de
caractères en retournant la valeur textuelle du premier noeud de l'ensemble dans
l'ordre du document."
Dans notre cas, text() désigne l'ensemble des noeuds de type "texte"
contenus dans l'élément "machin" et le premier de ces noeuds dans
l'ordre du document est constitué par le saut à la ligne et la tabulation situés
entre la fin de la balise "<machin>" et le début de la balise "<truc>".
Pour afficher l'ensemble des noeuds texte, il faut donc
utiliser une instruction telle que "copy-of" qui agit sur des
ensembles de noeuds:
<xsl:template match="machin">
<xsl:copy-of select="text()" />
</xsl:template>
Patrice
Pillot: "[xml-tech] Re: Problème avec XPath"Eric
van der Vlist: "[xml-tech] Re: Problème avec XPath"
Copyright 2001,
Eric van der Vlist.
|