[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: cknell@xxxxxxxxxx
Date: Mon, 17 Jul 2006 06:15:22 -0400
combing of names
How much hard-coding is "too much"?

How much you have to hard code depends on how deep the structure is. At the point below which you want to combine, xsl:copy-of will produce a deep copy and you won't have to specify node names lower in the tree than up to that point.

Here is an untested set of templates that should merge the two.
=====================
<xsl:variable name="file2" select="document('file2.xml')" />

<xsl:template match="/">
 <xsl:apply-templates />
</xsl:template>

<xsl:template match="base">
 <xsl:apply-templates>
</xsl:template>

<xsl:template match="foo">
 <foo>
   <xsl:apply-templates />
   <xsl:apply-templates select="$file2/base/foo/*" />
 </foo>
</xsl:template>

<xsl:template match="foo/*">
 <xsl:copy-of select="*" />
</xsl:template>
--
Charles Knell
cknell@xxxxxxxxxx - email



-----Original Message-----
From:     David B <daavidb@xxxxxxxxx>
Sent:     Mon, 17 Jul 2006 10:56:50 +0100
To:       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject:   Fwd: Combing two different documents

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.

I thought I would run an xslt on file1, and then use the XSLTSL
xpath:node template to get the xpath of the current node, construct a
string like:
       <xsl:variable name="path2">
           <xsl:text>document('file1.xml')/</xsl:text>
           <xsl:value-of select="$path"/>
           <xsl:text>bar2</xsl:text>
       </xsl:variable>

And then get the contents of the element that xpath points to using:
<xsl:value-of select="$path2'"/>

But that just prints the contents of the variable $path2! I would like
to use evaluate($path2) but that's not in the xslt standard, so is
there any other way of achieving what I am trying to achieve?

/David

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.