[XSL] @mode, il semble que le prédicat ne soit pas respecté
re bonjour (c est ma journée aujourd hui...)
j ai écris quelque chose comme ceci
Code:
1 2 3
| <xsl:attribute name="text">
<xsl:apply-templates select="node()" mode="text"/>
</xsl:attribute> |
cet attribut me sert à récupérer le text de certains sous éléments pour une comparaison ultérieure
voici les templates correspondants
Code:
1 2 3 4 5 6
| <xsl:template match="x:em | x:strong" mode="text">
<xsl:apply-templates select="node()" mode="text"/>
</xsl:template>
<xsl:template match="text()" mode="text">
<xsl:value-of select="."/>
</xsl:template> |
l idée est d avoir dans mon attribut text les text() de mon élément courant et ceux des enfants em et strong...
or il semble que mon template match avec tout ce qui passe.
En résumé mon
xsl:template match="x:em | x:strong"
est équivalent à
xsl:template match="*"
et là cela m ennuis..
j ai bien sûr corrigé l erreur en changeant le select du apply-templates mais cela reste ennuyeux...
quelqu un aurait une explication?
:roll:
Re: [XSL] @mode, il semble que le prédicat ne soit pas respe
Citation:
Envoyé par tiscars
or il semble que mon template match avec tout ce qui passe.
Non, ce n'est pas ton template qui "matche" tout, c'est qu'il n'existe pas de template pour intercepter les cas que tu ne veux pas traiter. Ainsi, en présence d'un élément x:italic par exemple, le processeur XSLT ne va pas trouver de template qui le "matche" (en mode "text"), il va donc activer les templates par défaut (on a tendance à les oublier ceux-là). Or, ces templates par défaut se contentent de parcourir les éléments et d'envoyer en sortie les noeuds textuels.
Il suffit d'ajouter un template vide qui intercepte les cas que tu ne veux pas traiter, et qui va être prioritaire sur le template par défaut :
Code:
<xsl:template match="x:*" mode="text" />