xsl-list
[Top] [All Lists]

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

2007-08-13 15:03:44
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 Gillespie’s TAKE BACK THE INTERNET tips and tricks, watch the video now http://safety.sympatico.msn.ca/


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