RE: [xsl] xsl:apply-templates doesn't fill variable correctly

Subject: RE: [xsl] xsl:apply-templates doesn't fill variable correctly
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 1 Aug 2005 10:17:01 +0100
I can't see what's wrong here, I suspect the error is in the part of the
stylesheet that you haven't shown us.

One comment on your coding style:

You do this:

>     <xsl:template match="*">
>     	<xsl:when test="name()='fussnote'">

and later this:

>     <xsl:template match="@*">
>		<xsl:when test="name()='href'">

In both cases, this isn't a good way of using template rules. It's much
better to have specific template rules for each kind of element or
attribute, than to have a generic rule which consists of a big xsl:choose
that switches on the element or attribute name.

Michael Kay
http://www.saxonica.com/
 

> -----Original Message-----
> From: Lensch, Thomas [mailto:Lensch@xxxxxxxx] 
> Sent: 01 August 2005 09:49
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] xsl:apply-templates doesn't fill variable correctly
> 
> Hi,
> 
> the following snipet shows the usage of variable tHtml:
> 
> When i find a 'fussnote' in my xml i apply templates into tHtml. Then,
> this variable is processed further.
> 
> 
>     <xsl:template match="*">
> 	...
> 			<xsl:when test="name()='fussnote'">
> 				<xsl:variable name="tHtml">
> 					<xsl:apply-templates
> select="text()|*"/>
> 				</xsl:variable>
> 				<!-- Pos_1 -->
> 				<xsl:variable name="ttHtml">
> 					<xsl:apply-templates
> select="xalan:nodeset($tHtml)" mode="escape"/>
> 				</xsl:variable>
> 				.... further processing and output of
> $ttHtml
> 			</xsl:when>
> 
>     <!-- Process Attributes -->
>     <xsl:template match="@*">
>         <xsl:choose>
> 			<xsl:when test="name()='href'">
>                 <xsl:choose>
>                     <xsl:when test="starts-with(.,'#')">
>                         <xsl:attribute name="href">
>                             <xsl:call-template name="VerityLink">
>                                 <xsl:with-param name="price"
> select="'0.0'"/>
>                                 <xsl:with-param name="part"
> select="/*/parameter/doc.part"/>
>                             </xsl:call-template>
>                             <xsl:value-of select="."/>
>                         </xsl:attribute>
>                     </xsl:when>
>                     <xsl:otherwise>
> 				....
> 
> 
> 
> Excerpts of my XML file:
> a)
> 	<fussnote nr="13">
>           <a href="#rd_200">Dazu Rn. 200</a>.</fussnote>
> 
> b)
> 	<fussnote nr="71">
>           <a href="#rd_103">Dazu Rn. 103</a>.</fussnote>
> 
> While a) works b) doesn't. In b) only the "." ist output.
> 
> When i use apply-templates without putting the result in a 
> variable, b)
> works too!
> 
> Does anybody have some hints for me? Possible problem of recursion on
> variable content?
> 
> Best regards
> Thomas.

Current Thread