Re: [xsl] Merging Two Nodesets .. can it be done?

Subject: Re: [xsl] Merging Two Nodesets .. can it be done?
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Tue, 14 Aug 2007 13:37:56 +0530
If the structure of your input XML is fixed, we can achieve the
desired output by hardcoding the structure. I can suggest something
like below:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">

  <xsl:output method="xml" indent="yes" />

  <xsl:template match="/X">
    <X>
      <Y>
        <Z>
          <xsl:copy-of select="Y/Z/*" />
        </Z>
        <xsl:for-each select="Y">
           <xsl:copy-of select="*[not(*)]" />
        </xsl:for-each>
      </Y>
    </X>
  </xsl:template>

</xsl:stylesheet>

But if you want the stylesheet to be generic, which could handle any
input XML, and merge the nodes, I think it will be slightly difficult
to write such a stylesheet.

On 8/14/07, Wasiq Shaikh <wasiq911@xxxxxxxxxxx> wrote:
> Quick question .. is there a way to merge two node-sets in XSL that have
> similar structure?
>
> Example Input: (generated output from XSLT)
>
> <X>
>   <Y>
>      <aaa>
>      <Z>
>         <bbb>
>         <ccc>
>      </Z>
>   </Y>
>   <Y>
>      <ddd>
>      <eee>
>      <Z>
>         <fff>
>      </Z>
>   </Y>
> </X>
>
> Desired Output: (This is how I would like to get it in the same XSLT
> process)
>
> <X>
>   <Y>
>      <Z>
>         <bbb>
>         <ccc>
>         <fff>
>      </Z>
>      <aaa>
>      <ddd>
>      <eee>
>   </Y>
> </X>
>
> Notice the Y elements are merged, as well as the Z elements.
>
> Is there any function or algorithm out there that can do this in one shot
> (or at all)? Or do I have to turn this into a two step process by making the
> generated output an input do another XSL that does the merge?
>
> Thanks for any insight!
>
> W.S


-- 
Regards,
Mukul Gandhi

Current Thread