This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: copying child nodes n-level deep


Ram Anantha wrote


>> If you want to perform a deep copy (all elements and their children), use
>> <xsl:copy-of> as opposed to <xsl:copy> which only copies the current
>> element.  Selecting the grand-children of the current node can be
performed
>> simply with a concatenation of two child::* axis specifiers:-
>>
>> <xsl:template match="B">
>>  <xsl:copy-of select="child::*/child::*"/>
>> </xsl:template>
>
> ----------------------------------
> Thanks, Rob for your response.
>
> What should I change if I need to make a deep-copy of everything except
the
> attributes? Can I still use xsl:copy-of?
>

Ram, rather than replying to individual posters please reply to the list
with follow-up questions, and try to specify your original question as
precisely as possible.

If you don't want attributes then the problem is a little more difficult.
You can't make use of <xsl:copy-of> so you'll have to use recursion.  You
don't want to make use of the built-in template for elements because that
only copies the text value of the element.  Also, you don't want to replace
the built-in template for elements because then you will copy all and
sundry.

One solution is to make use of modes:-

<xsl:template match="B">
 <xsl:apply-templates mode="copy" select="child::*/child::*"/>
</xsl:template>

<xsl:template match="*" mode="copy">
 <xsl:copy>
   <xsl:apply-templates mode="copy"/>
 </xsl:copy>
</xsl:template>

In this way you decide at what branch to start the recursive copy, and you
avoid the built-in template.

Regards
~Rob



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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]