xsl-list
[Top] [All Lists]

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

2007-08-14 01:08:27
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(_at_)hotmail(_dot_)com> 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

--~------------------------------------------------------------------
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>