Hi Arul,
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<!-- load the merge file -->
<xsl:variable name="emps" select="document('employeeAddresses.xml')"/>
<xsl:template match="/">
<employees>
<xsl:for-each select="employees/employee"> <!--
cache the employee's ID --> <xsl:variable
name="id" select="@id"/> <!-- copy the pincode of the
second XML --> <employee pincode="{$emps//employee[(_at_)id
= $id]/@pincode}">
<!-- copy the child nodes -->
<xsl:copy-of select="*"/>
<!-- copy the address -->
<xsl:copy-of select="$emps//employee[(_at_)id = $id]/address"/>
</employee>
</xsl:for-each>
</employees>
</xsl:template>
</xsl:stylesheet>
I changed the
<xsl:variable name="id"><xsl:value-of select="@id"/></xsl:variable>
in <xsl:variable name="id" select="@id"/>
This is shorter to write, easier to read and you don't create a RTF.
Furhtermore I changed child::* in *.
I select the correct nodes from employeeAddress.xml with the help of the
following pattern: $emps//employee[(_at_)id = $id].
In english this means something like select those employee from the second file
from which the id-attribute is equal to the current id in the main xml.
Cheers,
Agnes
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list