xsl-list
[Top] [All Lists]

Merge two XML files

2003-04-29 18:01:48
I have 2 XML files that I want to be able to merge them together given a list of keys. I have searched the group but the examples are slightly different than ours. Our XML files have the following format:
XML1.xml

<Document>
 <row>
   <column name="FirstName">Smith</column>
   <column name="LastName">John</column>
   <column name="Address">7777 First </column>
 </row>
 <row>
   <column name="FirstName">Smith2</column>
   <column name="LastName">John2</column>
   <column name="Address">7777 Second </column>
 </row>
...
</Document>

XML2.xml
<Document>
 <row>
   <column name="FirstName">Smith</column>
   <column name="LastName">John</column>
   <column name="Age">36</column>
 </row>
 <row>
   <column name="FirstName">Smith2</column>
   <column name="LastName">John2</column>
   <column name="Age">40</column>
 </row>
...
</Document>

The result XML should be:
<Document>
 <row>
   <column name="FirstName">Smith</column>
   <column name="LastName">John</column>
   <column name="Address">7777 First </column>
   <column name="Age">36</column>
 </row>
 <row>
   <column name="FirstName">Smith2</column>
   <column name="LastName">John2</column>
   <column name="Address">7777 Second </column>
   <column name="Age">40</column>
 </row>
...
</Document>

Here is my first attempt of writing the XSL file. For simplification, I just tried to merge them based on the "FirstName" column. However, I don't know how to specify the key to search in the second file.


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
 version="1.0" xmlns:xalan="http://xml.apache.org/xalan";>

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

<xsl:param name="source" select="c:/temp/kmtable2.xml"/> <!--source of data-->

<xsl:key name="row" match="$source/Document/row" use="column[(_at_)name='FirstName']"/>

<xsl:template match="/">        <!--document element-->
  <Document>
     <xsl:for-each select="Document/row">
       <xsl:copy-of select="."/>
       <xsl:variable name="name" select="column[(_at_)name='FirstName']"/>
       <xsl:for-each select="document($source)/Document/row">
         <xsl:apply-templates select="key('row', $name)"/>
       </xsl:for-each> -->
     </xsl:for-each>
  </Document>
</xsl:template>

<xsl:template match="row">
 <xsl:copy-of select="."/>
</xsl:template>

</xsl:stylesheet>

It kept complaining about "A node test that matches either NCName:* or QName was expected.". It looks like it doesn't like the match claus in <xsl:key>.


_________________________________________________________________
Add photos to your e-mail with MSN 8. Get 2 months FREE*. http://join.msn.com/?page=features/featuredemail


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



<Prev in Thread] Current Thread [Next in Thread>