[xsl] Conditional document merge

Subject: [xsl] Conditional document merge
From: "Hunsberger, Peter" <Peter.Hunsberger@xxxxxxxxxx>
Date: Mon, 27 May 2002 10:15:58 -0500
I've got a more or less classic problem of merging two XML documents.  The
gotcha's in this case are as follows:

1) document A is guaranteed to contain all required nodes, and will include
some that are not needed, but the order of the nodes may be out of order.

2) document B man not contain all required nodes, if it is missing any, some
may be flagged as being mandatory in document A, others may be optional and
will not be included in the output.  Document B will have all nodes in the
required order, any missing nodes can be substituted immediately following
any previous match.  Document B will contain attributes that override any
from document A.

For example, document A might look like:

	<a required="1" title="Example 1"/>
	<b title="Example 2"/>
	<c title="Example 3"/>
	<d required="1" title="Example 4"/>
	<e title="Example 5"/>

Document B might look like:

	<a title=" New title 1"/>

The required output would be:

	<e title="Example 5"/>
	<a title=" New title 1"/>
	<c title="Example 3"/>
	<d title="Example 4"/>

Where element b is skipped because it is not in document B and is not marked
as required.

Any opinions on what the best way to approach this is?  Currently I'm using
document B as the primary source and filling in any missing data from
Document A as I traverse document B.  However, I do not yet handle the case
of missing required nodes and I'm not sure how I would pick up on them?  The
alternative of driving things from document A and throwing out the missing
not required nodes doesn't seem any simpler, or would there be some elegant
way of building a key against document A and then using document B to select
from it in the proper order automagically skipping the nodes that aren't
required and aren't in document B?

Peter Hunsberger

Phone: 901-495-5252
E-mail: Peter.Hunsberger@xxxxxxxxxx

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Current Thread