Re: [xsl] Fwd: Combing two different documents

Subject: Re: [xsl] Fwd: Combing two different documents
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Mon, 17 Jul 2006 20:09:10 +0530
Taking hint from Andrew's answer, I think you need a stylesheet
something like this:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output method="xml" indent="yes" />

<xsl:variable name="doc2" select="document('file2.xml')" />

<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="$doc2//*[not(*)]" />
</xsl:template>

</xsl:stylesheet>

Regards,
Mukul

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.

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