xsl-list
[Top] [All Lists]

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

2007-01-05 15:06:39
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(_at_)onebox(_dot_)com - email



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

cknell(_at_)onebox(_dot_)com 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



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>
  • RE: Re: [xsl] Selectively applying Identity transform to multiple inputs (Multiplexer Style Sheet), cknell <=