Subject: RE: Conditional merge of 2 XML files
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 31 Aug 2005 14:16:04 +0100
|
Unfortunately, for a newcomer to the language, you've selected a rather
difficult problem. I'm not sure I even understand the problem fully, for
example I don't understand whether the order of elements in the two files is
important: I get the impression that it is. This leads to all sorts of
questions, for example if the sequence in the first file is
A B F G
and in the second is
A D G F
what output do you want?
Also, presumably the hierarchy is important, so
<second>A B C</second><second>D E F</second>
is not the same as
<second>A B C D</second><second>E F</second>
I think the solution to this is going to involve a recursive walk of the two
trees in parallel: that is, a recursive template which is passed two
parameters, being the current position in both trees; it then needs to do
some analysis of what it finds at those positions, and then call itself
recursively, having advanced one or both of the two positions.
That's just a sketch, I don't have time to work it out more fully. It isn't
an exercise I would set on a beginner's course.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Thomas Tarpin-Lyonnet [mailto:bartleby@xxxxxxxxxx]
> Sent: 31 August 2005 03:41
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Conditional merge of 2 XML files
>
> Hello,
> I'm a newbie in XSL and I would like to do something with 2
> XML files and i
> can't manage to do it.
> Here is my problem.
> I have 2 XML files, file_1.xml and file_2.xml structured as follow:
> file_1.xml:
> <?xml version="1.0"?>
> <firstTag>
> <secondTag>
> <thirdTag> Thomas </thirdTag>
> <thirdTag> Tarpin </thirdTag>
> </secondTag>
> <secondTag>
> <thirdTag> Pipo </thirdTag>
> <thirdTag> Pipolaki </thirdTag>
> </secondTag>
> </firstTag>
>
> file_2.xml:
> <?xml version="1.0"?>
> <firstTag>
> <secondTag>
> <thirdTag here="Yes"> Thomas </thirdTag>
> <thirdTag here="Yes"> - </thirdTag>
> <thirdTag here="Yes"> Lyonnet </thirdTag>
> </secondTag>
> <secondTag>
> <thirdTag here="Yes"> Pipo </thirdTag>
> <thirdTag here="Yes"> Pipolaki </thirdTag>
> </secondTag>
> </firstTag>
>
> I would like to be able to do the diff between the two files
> and generate
> another xml that will be the result of the merging of the two
> files only if
> there are some thirdTag that are defined in file_1.xml and missing in
> file_2.xml. Otherwise if the two files contains the same
> thirdTag then the
> result.xml will be the same as file_2.xml.
> The resulting file would be something like that:
> result.xml:
> <?xml version="1.0"?>
> <firstTag>
> <secondTag>
> <thirdTag here="Yes"> Thomas </thirdTag>
> <thirdTag here="No"> Tarpin </thirdTag>
> <thirdTag here="Yes"> - </thirdTag>
> <thirdTag here="Yes"> Lyonnet </thirdTag>
> </secondTag>
> <secondTag>
> <thirdTag here="Yes"> Pipo </thirdTag>
> <thirdTag here="Yes"> Pipolaki </thirdTag>
> </secondTag>
> </firstTag>
>
> I know that i have to use the document() function but i don't
> know how.
> How can i do that ? I'm a bit confused, i tried but i can't.
> Anybody to help me ?
>
> Thanks
>
> Thomas
>
> *********************************
> * Thomas Tarpin-Lyonnet *
> * http://jaccal.sourceforge.net *
> *********************************
|