J'ai un problème avec xsl:apply-templates. J'essaie d'appliquer un modèle à une balise particulière, mais je vois du texte provenant d'autres balises. Un simple fichier xml :
<?xml version="1.0"?>
<!-- execute with xsltproc foo.xsl foo.xml -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" />
<xsl:template match="/foo">
<xsl:for-each select="bar">
<xsl:value-of select="grill"/>
<xsl:apply-templates match="baz"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="foo">[<xsl:value-of select="." />|http://example.com/<xsl:value-of select="." />]</xsl:template>
</xsl:stylesheet>
L'entrée est la suivante :
<?xml version="1.0"?>
<foo>
<bar>
<baz>a <foo>b</foo> c</baz>
<grill>grill</grill>
</bar>
</foo>
Le résultat est le suivant :
grill
a [b|http://example.com/b] c
grill
Je m'attendais à ce que le résultat soit
grill
a [b|http://example.com/b] c
(Je ne me soucie pas des problèmes d'espacement pour l'instant)
Je peux contourner le problème en enveloppant les xsl:apply-templates avec un xsl:for-each :
<xsl:for-each select="grill">
<xsl:apply-templates match="grill"/>
</xsl:for-each>
Mais je n'aime vraiment pas cette solution. Existe-t-il une meilleure solution ?