[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Merging Two Nodesets .. can it be done?

Subject: Re: Merging Two Nodesets .. can it be done?
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Tue, 14 Aug 2007 00:03:07 +0200
Re:  Merging Two Nodesets .. can it be done?
Hi Wasiq,

Yes, it can be done and should not be too hard.

There are very many answers possible, largely depending on some information you did not yet give:
1. What XSLT version do you use? It makes a large difference whether you do this in 1.0 or 2.0. If 1.0, can use the node-set extension function?
2. Can you define your "merging" more detailed? In your example you also change the order (<aaa> ends up under <Z>), how is that defined?
3. How does your current stylesheet looks like that makes the current nodes?
4. Do you mean that the nodes that need to be merged are siblings? Or are they separate variables / input docs?


You'd understand that the XSLT spec does not yield a specific function for that considering the very wide ways of interpreting what "merging" means.

I think that in general an approach would be something along the following lines, considering you can use XSLT 2.0, or XSLT 1.0 with a node-set extension.

a. Assume your current two node sets (the ones that need to be merged) are siblings and you apply to the root of the first node that need to be merged

b. In the matching template you select everything from the second node-set that is not in the current node set (you can choose to define the level of your match, i.e., identity (not good for you I think), equal names, equal local names).

c. Apply the next ones that have children themselves and do the same there.


Hmm, this is quite basic / rough. The trouble is in getting the selected node sets right. If you supply some more information (preferably with what you currently have in your stylesheet), I can help you further.


Cheers,
-- Abel Braaksma

Wasiq Shaikh 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

_________________________________________________________________
Former Police Officer Paul Gillespies TAKE BACK THE INTERNET tips and tricks, watch the video now http://safety.sympatico.msn.ca/

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.