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