RE: Re: [xsl] Selectively applying Identity transform to multiple inputs (Multiplexer Style Sheet)

Subject: RE: Re: [xsl] Selectively applying Identity transform to multiple inputs (Multiplexer Style Sheet)
From: cknell@xxxxxxxxxx
Date: Fri, 05 Jan 2007 17:05:56 -0500
Instead of using <xsl:copy-of> at the highest level, you can use <xsl:apply-templates />.

In each template you could repeat the <xsl:choose> construct and test for the value of the parameter in question. 

When you wish to copy the element without change (identity transformation), you use the <xsl:copy-of> instruction. When you want to suppress the element altogether, just use a no-output rule.

Example assuming the parameter you wish to evaluate is a global one:

<xsl:template match="some-element-name">
  <xsl:choose>
     <xsl:when test="$parameter-name='no-output'" />
     <xsl:otherwise><xsl:copy-of select="." /></xsl:otherwise>
  </xsl:choose>
</xsl:template>
-- 
Charles Knell
cknell@xxxxxxxxxx - email



-----Original Message-----
From:     Farrukh S. Najmi <farrukh@xxxxxxxxxxxxxxxxxxxxx>
Sent:     Fri, 05 Jan 2007 16:04:14 -0500
To:       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject:  Re: [xsl] Selectively applying Identity transform to multiple inputs (Multiplexer Style Sheet)

cknell@xxxxxxxxxx wrote:
> How about this?
>
>
> <xsl:template match="/">
>   <xsl:choose>
>     <xsl:when test="$input2=''">
>        <xsl:copy-of select="." />
>     </xsl:when>
>     <xsl:otherwise>
>       <xsl:copy-of select="document($input2/)" />
>     </xsl:otherwise>
>   </xsl:choose>
> </xsl:template>
>   
Thanks very much! This does the trick very nicely.

How can I extend above so that I can do selective transformation of some
nodes in the output tree?
For example what if I want to suppress the copying of some nodes based
on a parameter value.

Here is a sample template to selectively copy tp:Comment element. I cant
figure out how how to wire
this to what you suggested earlier.

    <!--
    Only copy tp:Comment if $copyComment is not null
    -->
    <xsl:template match="tp:Comment">       
        <xsl:if test="$copyComment != ''">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:if>       
    </xsl:template>   


Thanks again.

-- 
Regards,
Farrukh

Web: http://www.wellfleetsoftware.com

Current Thread