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

Subject: Re: [xsl] Processing 2 times the same node without copying content...
From: Xmlizer <xmlizer+xsllist@xxxxxxxxx>
Date: Fri, 8 Aug 2008 14:33:20 +0200
Have you tried this instead ?

<xsl:template match="*[@id]">
     <a name="{@id}"/>
     <xsl:copy>
         <xsl:apply-templates select="@*[not(self::id)]|
node()"/>
     </xsl:copy>
</xsl:template>

Xmlizer

On Fri, Aug 8, 2008 at 1:56 PM, Adam Komisarek <akakus@xxxxxxxxx> wrote:
>
> 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