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

Re: Merging common tags of 2 xml files

Subject: Re: Merging common tags of 2 xml files
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 6 Aug 2014 11:07:51 -0000
Re:  Merging common tags of 2 xml files
varun bhatnagar varun292006@xxxxxxxxx wrote:

*_File1.xml_*

<?xml version="1.0" encoding="UTF-8"?>

<config>
   <version>
      <input00 version ="11"/>
      <name00 name ="abc"/>
   </version>
    <version>
      <input00 version ="22"/>
      <name00 name ="def"/>
   </version>
</config>

*_File2.xml_*

<?xml version="1.0" encoding="UTF-8"?>
<config>
   <version>
      <input00 version ="2"/>
      <name00 name ="xyz"/>
   </version>
     <version>
      <input00 version ="3"/>
      <name00 name ="pqr"/>
   </version>
     <version>
      <input00 version ="4"/>
      <name00 name ="uvw"/>
   </version>
</config>

*_Expected Output.xml_*
*
*
<config>
   <version Label="test" sNo="test">
      <input00 version ="2"/>
      <name00 name ="xyz"/>
   </version>
   <version Label="test" sNo="test">
      <input00 version ="3"/>
      <name00 name ="pqr"/>
   </version>
   <version Label="test" sNo="test">
      <input00 version ="4"/>
      <name00 name ="uvw"/>
   </version>
<version Label="test" sNo="test">
      <input00 version ="11"/>
      <name00 name ="abc"/>
   </version>
   <version Label="test" sNo="test">
      <input00 version ="22"/>
      <name00 name ="def"/>
   </version>
</config>

I think you simply need to write a template for the root that pulls in the nodes from the other document and then your template for "version" simply needs to add the attributes:


<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

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

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

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

  <xsl:template match="version">
    <xsl:copy>
      <xsl:attribute name="Level">
        <xsl:value-of select="'test'"></xsl:value-of>
      </xsl:attribute>
      <xsl:attribute name="sNo">
        <xsl:value-of select="'test'"></xsl:value-of>
      </xsl:attribute>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

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.