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

Re: Fwd: Combing two different documents

Subject: Re: Fwd: Combing two different documents
From: "andrew welch" <andrew.j.welch@xxxxxxxxx>
Date: Mon, 17 Jul 2006 11:26:56 +0100
xml copy nodes different documents
On 7/17/06, andrew welch <andrew.j.welch@xxxxxxxxx> wrote:
On 7/17/06, David B <daavidb@xxxxxxxxx> wrote:
> Hello,
>
> I am trying to combine to seperate XML documents that have the same
> structure but different leaf nodes, e.g:
> ---File 1.xml---
> <base>
>      <foo>
>           <bar1>123</bar1>
>      </foo>
> </base>
> --File 2.xml----
> <base>
>      <foo>
>          <bar2>abc</bar2>
>      </foo>
> </base>
>
> I want the output to be:
> <base>
>      <foo>
>          <bar1>123</bar1>
>          <bar2>abc</bar2>
>      </foo>
> </base>
>
> Preferably without hardcoding too much of the structure of the file
> into the .xsl.

How about something like:

<xsl:template match="@*|node()">
        <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
</xsl:template>

<xsl:template match="*[not(*)]">
        <xsl:copy-of select="."/>
        <xsl:copy-of select="$file2//*[not(*)][count(preceding::*) =
count(current()/preceding::*)]"/>
</xsl:template>

You would apply this transform to file1.xml and reference file2.xml
using the document() function.

You could speed it up by using a key for the lookup into $file2 as the
heavy using of the preceding axis would likely make this very slow.

If there are a different numbers of leaf nodes at the same point in each file then you would need work on the level above, eg:

<xsl:template match="*[*[not(*)]]">
	<xsl:copy>
		<xsl:copy-of select="*"/>
		<xsl:copy-of select="$file2//*[*[not(*)]][count(preceding::*) =
count(current()/preceding::*)]/*"/>
	</xsl:copy>
</xsl:template>

If there is mixed content at the level above (<foo> level) use copy-of
select="node()", but if all your text nodes are contained by leaf
nodes then this should be fine.

cheers
andrew

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.