Salut à tous,
je suis débutant en XSL. Je comprend les bases mais je ne comprend pas ce qui suit : j'essai d'appeler un template à l'intérieur d'un autre template, mais le code HTML n'est pas généré pour le second template (celui qui se trouve à l'intérieur du premier).
Un petit plus de détail :
Je déclare un premier template nommé "BlockGlobal" puis un autre "BlockContent". Jusque la tout va bien. Ensuite je fais un XSL qui appel le premier template pour transformer les données principale du XML, à l'intérieur duquel j'appel le deuxieme template pour transformer les données du noeud enfant.
Et c'est la que ca cloche : je récupère bien les données mais le code HTML du second template n'est pas généré. Comme s'il était ignoré ...
Je sais pas si quelqu'un a dèjà rencontré ce probleme, il manque peut etre juste un detail dans le code ? Sinon y a t'il un autre moyen d'inclure en XSL un template dans un autre template ?
Ci-dessous les codes.
templates.xsl (définition des templates)
transform.xsl (les xsl de transformation)
Merci d'avance pour votre aide !
Modifié par AntiStatic (11 Mar 2006 - 16:32)
je suis débutant en XSL. Je comprend les bases mais je ne comprend pas ce qui suit : j'essai d'appeler un template à l'intérieur d'un autre template, mais le code HTML n'est pas généré pour le second template (celui qui se trouve à l'intérieur du premier).
Un petit plus de détail :
Je déclare un premier template nommé "BlockGlobal" puis un autre "BlockContent". Jusque la tout va bien. Ensuite je fais un XSL qui appel le premier template pour transformer les données principale du XML, à l'intérieur duquel j'appel le deuxieme template pour transformer les données du noeud enfant.
Et c'est la que ca cloche : je récupère bien les données mais le code HTML du second template n'est pas généré. Comme s'il était ignoré ...
Je sais pas si quelqu'un a dèjà rencontré ce probleme, il manque peut etre juste un detail dans le code ? Sinon y a t'il un autre moyen d'inclure en XSL un template dans un autre template ?
Ci-dessous les codes.
templates.xsl (définition des templates)
<?xml version='1.0' encoding='ISO-8859-1'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://www.xxx.com">
<!-- Template d'un Block -->
<xsl:template name="BlockGlobal">
<xsl:param name="Titre"/>
<xsl:param name="BlockClass"/>
<xsl:param name="BlockIn"/>
<div class="Block {$BlockClass}">
<h2>MON TITRE : <xsl:value-of select="$Titre" disable-output-escaping="yes"/></h2>
<div class="BlockIn">
<xsl:value-of select="$BlockIn" disable-output-escaping="yes"/>
</div>
</div>
</xsl:template>
<!-- Template d'un Block -->
<!-- Template de Content, se trouve à l'intérieur de BlockIn sous le H2
C'est la présentation qui inclu des colones gauches et droites -->
<xsl:template name="BlockContent">
<xsl:param name="Titre"/>
<div class="Content">
<div class="Left"><p>IMAGETOTO</p></div>
<div class="Right">
<div class="Title"><xsl:value-of select="$Titre" disable-output-escaping="yes"/></div>
<div class="Text">
<p>TEXT</p>
</div>
<div class="More"><img src="/images/template/lire-la-suite.gif" alt="..." /></div>
</div>
</div>
</xsl:template>
<!-- Template de Content -->
</xsl:stylesheet>
transform.xsl (les xsl de transformation)
<?xml version='1.0' encoding='ISO-8859-1'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" encoding="iso-8859-1" />
<xsl:include href="inc/templates.xsl" />
<xsl:param name="BlockClass" />
<xsl:template match="bloc">
<xsl:apply-templates select="itembloc" />
</xsl:template>
<xsl:template match="itembloc">
[b]<xsl:call-template name="BlockGlobal">[/b]
<xsl:with-param name="Titre">
<xsl:value-of select="description" />
</xsl:with-param>
<xsl:with-param name="BlockClass">
<xsl:value-of select="$BlockClass"/>
</xsl:with-param>
<xsl:with-param name="BlockIn">
<xsl:apply-templates select="s_itembloc[position()<3]"/>
</xsl:with-param>
[b]</xsl:call-template>[/b]
</xsl:template>
<xsl:template match="s_itembloc">
[b]<xsl:call-template name="BlockContent">[/b]
<xsl:with-param name="Titre">
BlockIn
</xsl:with-param>
[b]</xsl:call-template>[/b]
</xsl:template>
</xsl:stylesheet>
Merci d'avance pour votre aide !
Modifié par AntiStatic (11 Mar 2006 - 16:32)