RE: [xsl] Processing 2 times the same node without copying content...

Subject: RE: [xsl] Processing 2 times the same node without copying content...
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 8 Aug 2008 13:30:50 +0100
Rather than showing us half a stylesheet that doesn't work because of
something in the other half, why not explain the problem you are trying to
solve? That is, show us your input and output.

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

> -----Original Message-----
> From: Adam Komisarek [mailto:akakus@xxxxxxxxx] 
> Sent: 08 August 2008 12:57
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Processing 2 times the same node without 
> copying content...
> 
> Hello!
> 
> I have following problem: I need to add anchor support for 
> quite big stylesheets which produce HTML output. So I want to 
> copy @id / add <a name="{@id}"> to the result tree. But the 
> problem is I can't do it in this way:
> 
> <!-- HTML ANCHORS -->
> <xsl:template match="*[@id]" priority="2">
> 	<a name="{@id}"/>
> 	
> 	<xsl:variable name="content">
> 		<xsl:copy>
> 			<xsl:apply-templates mode="anchor" 
> select="@*|node()"/>
> 		</xsl:copy>
> 	</xsl:variable>
> 	
> 	<xsl:apply-templates select="xalan:nodeset($content)"/>
> </xsl:template>
> 
> <xsl:template match="node()" mode="anchor">
> 	<xsl:copy-of select="."/>
> </xsl:template>
> 
> <xsl:template match="@*" mode="anchor">
> 	<xsl:choose>
> 		<xsl:when test="name()='id'">	
> 		</xsl:when>
> 		<xsl:otherwise>
> 			<xsl:copy>
> 				<xsl:apply-templates select="."/>
> 			</xsl:copy>	
> 		</xsl:otherwise>
> 	</xsl:choose>
> </xsl:template>
> 
> Because as far as I know xalan:nodeset changes input tree and 
> that stylesheet involve counting on preceding elements (to 
> calculate how many page breaks appeared). So I can't do that way :(.
> 
> Is there anyway to apply-templates on self node and ommiting 
> some attributes? It would be thing I am looking for... Thanks 
> for help!
> 
> Regards,
> Adam Komisarek

Current Thread