RE: [xsl] Forbidden with several xsl:attribute from xsl:apply-templates?

Subject: RE: [xsl] Forbidden with several xsl:attribute from xsl:apply-templates?
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Mon, 30 Jun 2003 18:48:36 +0100
I guess the problem is in the "..." that you haven't shown us. It is
probably writing elements or text nodes to the output. You can't write
an attribute after writing a text node or element child to the same
parent.

Michael Kay

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Erik Beijnoff
> Sent: 30 June 2003 16:09
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Forbidden with several xsl:attribute from 
> xsl:apply-templates?
> 
> 
> I'm having a problem with two consecutive <xsl:apply-templates> that
> both should output <xsl:attribute>. I'm having a feeling that 
> I'm trying
> to do a forbidden thing, but I figured I'd turn to the list 
> to be sure.
> 
> Im running FOP togheter with Xalan to create PDF:s. So the 
> first step is
> the transformation of xml via xslt to xsl:fo then to pdf via FOP.
> However, problems occur.
> 
> The execution is as follows:
> 
> 1. A template gets called when an element with a "class" attribute is
> the active node.
> 2. The first apply-templates applies any template that is specific for
> elements with that name
> 3. The second apply-templates applies any template that is 
> specific for
> elements with that class name
> 
> In point three, the output "Cannot add attribute font-family 
> after child
> nodes or before an element is produced. Attribute will be 
> ignored." gets
> output at the command line.
> 
> I'm aware that all <xsl:attribute> must appear in template data before
> any child nodes, but I'd figured that since both 
> <apply-templates> only
> outputs <xsl:attribute>, it should work. Well, it seems like 
> it perhaps
> doesn't work that way after all.
> 
> 
> <!-- The template where the error occurs-->
> <xsl:template match="p">
>    <fo:block>
> 	<!-- First apply works -->
>      <xsl:apply-templates select="." mode="elementselection"/>
> 
>      <!-- Second gets it attribute output ignored -->
>      <xsl:apply-templates select="." mode="classselection"/>
> 
>      <xsl:apply-templates/>
>    </fo:block>
> </xsl:template>	
> 
> <!-- Attributes for a specific type of element is output -->
> <xsl:template match="h1" mode="elementselection">	
>    <xsl:attribute name="font-family">sans-serif</xsl:attribute>
>    <xsl:attribute name="font-size">20pt</xsl:attribute>
>    ...
> </xsl:template>
> 
> <!-- Attributes for an element with a specific class is output -->
> <xsl:template match="*[@class = 'leadtext']" mode="classselection">
>    <xsl:attribute 
> name="border-bottom-color">sans-serif</xsl:attribute>
> 
>    <xsl:attribute name="border-bottom-width">0.5pt</xsl:attribute>
>    ...
> </xsl:template>
> 
> Regards Erik Beijnoff
> erik@xxxxxxxxxxxx
> erik@xxxxxxxxxxxxxx
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread